C# fragment ciągu znaków zapisany do nowej zmiennej

0

Witam,

Chodzi o to że mam linijkę w textboxie z takim ciągiem znaków: 44, 23, 5 { 43: placed blue Tra. bunker } i chce by fragment " 44, 23, 5" został zapisany do jednej zmienny a "bunker " do kolejnej . Jak to zrobić?

0

Teoretycznie pasowałyby np. wyrażenia regularne - ale zanim się za to zabierzesz, opowiedz skąd wyciągasz taki dziwny format danych i w jakim celu tego potrzebujesz.
Być może mamy do czynienia z tzw. problemem XY.

0

Są to kordynaty budynku który jest umieszczony w grze, ten szereg danych przedstawia koordynaty, kierunek budynki i typ budynku a jest mi to potrzebne ponieważ koordynaty i jego typ chce wywołać w komendzie na ich budowę jeśli zostaną zniszczone.

0
int n = str.FirstOf('{');
string koord = str.SubString(0, n-1);

Potem wyszukujesz zakończenie nawiasu klamrowego i tak jak sobie ułożysz tak będzie

0

2 sposoby


            string input = " 44, 23 , 5 { 43: placed blue Tra. bunker } ";
 
            var pos_xyz = input.Split(new[] { ',', '{', '.', '}' })
                .Select(x => x.Trim())
                .ToArray()
                .Take(3);
            
            int index = input.IndexOf('.');
            string output = input.Remove(1,index);
            index = output.IndexOf('}');
            output = output.Remove(index);
            output = output.Trim();
            
            foreach (var value in pos_xyz)
            {
               Console.WriteLine(value);
            }
            
            Console.WriteLine(output);

			output:
			44
			23
			5
			bunker


            string input = " 44, 23 , 5 { 43: placed blue Tra. bunker } ";
 
            var arr = input .Split(new[] { ',', '{', '.', '}' })
                .Select(x => x.Trim())
                .ToArray();
            
			List<string> output = new List<string>();
			foreach (var value in arr)
			{
				if (Array.IndexOf(arr, value) != 3)
				{
					output.Add(value);
				}
			}
            
            foreach (var value in output)
            {
                Console.WriteLine(value);
            }

			output:
			44
			23
			5
			bunker

0

@WeiXiao: to dalej jest bardzo nieoptymalne. Mój kod realizujący zadanie poniżej:

string input = " 44, 23, 5 { 43: placed blue Tra. bunker }";
int firstBrace = input.IndexOf('{');
int lastDot = input.LastIndexOf('.');

string coords = input.Substring(0, firstBrace).Trim();
string name = input.Substring(lastDot + 1).Trim(' ', '}');

Założenia - po ostatniej kropce w stringu jest nazwa budynku.
Mierząc czasy wykonania, mój kod zajmuje około 20 ticków, kod poprzednika prawie 1000 :)

Jasne, dla człowieka nie będzie znaczenia, ale czemu pisać tak nieoptymalny kod? Kilka takich figlarskich fragmentów i człowiek już zauważy różnice.

0

Przerobiłem by czytał mi każdą linijkę richtextboxa, 1 linijkę dobrze przetwarza lecz kolejne nie.

  private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < richTextBox2.Lines.Length; i++)
            {
                string input = richTextBox2.Lines[i];

                int firstBrace = input.IndexOf('{');
                int lastDot = input.LastIndexOf('.');

                string coords = input.Substring(i, firstBrace).Trim();
                string name = input.Substring(lastDot + 1).Trim(' ', '}');

                richTextBox1.Text += "Build" + name + "\n" + "Coords" + coords;
            }  
        }
0

A może tak:?

StringBuilder sb = new StringBuilder();
for...
{
  sb.Append("Build");
  sb.Append(richTextBox2.Lines[i].Substring(richTextBox2.Lines[i].LastIndexOf('.') + 1).Trim(' ', '}'));
  sb.Append("\n");
  sb.Append("Coords");
  sb.Append( richTextBox2.Lines[i].Substring(i, richTextBox2.Lines[i].IndexOf('{')).Trim());
}
richTextBox1.Text += sb.ToString();

1 użytkowników online, w tym zalogowanych: 0, gości: 1