Odczytywanie danych w określonej formie

0

Witam,
jestem nieco zielony więc potrzebuję pomocy być może z banalnym skryptem.

Mam dane, które wyglądają tak:

clid=1 cid=3 client_database_id=15403 client_nickname=GdyniaTS3.pl\s-\sWITA\s! client_type=0 client_flag_talking=0 clien
t_input_muted=0 client_output_muted=0 client_input_hardware=1 client_output_hardware=1 client_talk_power=10000 client_is
_talker=0 client_is_priority_speaker=0 client_is_recording=0 client_is_channel_commander=0 client_is_muted=0|clid=13 cid
=3 client_database_id=9548 client_nickname=tobik client_type=0 client_flag_talking=0 client_input_muted=0 client_output_
muted=0 client_input_hardware=1 client_output_hardware=1 client_talk_power=0 client_is_talker=0 client_is_priority_speak
er=0 client_is_recording=0 client_is_channel_commander=0 client_is_muted=0 

Zależy mi na kodzie który z takiego ciągu będzie potrafił odczytać wartości zapisane w stylu zmienna=wartość.

Dokładniej chciałbym móc wyciągnąć takie dane jak

clid
client_nickname
client_flag_talking
 

I zapisać je w tablicach typu

client_id[]
client_nickname[]
client_flag_talking[]

Oczywiście te tablice z funkcją auto inkrementacji. Kombinowałem z REGEX ale, albo jest to niewykonalne albo ja nie umiem zbudować wyrażenia, które wyłapie wszystkie te dane z całego ciągu.

Pozdrawiam.

1
	public static void Main()
	{
		var input = @"clid=1 cid=3 client_database_id=15403 client_nickname=GdyniaTS3.pl\s-\sWITA\s! client_type=0 client_flag_talking=0 client_input_muted=0 client_output_muted=0 client_input_hardware=1 client_output_hardware=1 client_talk_power=10000 client_is_talker=0 client_is_priority_speaker=0 client_is_recording=0 client_is_channel_commander=0 client_is_muted=0|clid=13 cid=3 client_database_id=9548 client_nickname=tobik client_type=0 client_flag_talking=0 client_input_muted=0 client_output_muted=0 client_input_hardware=1 client_output_hardware=1 client_talk_power=0 client_is_talker=0 client_is_priority_speaker=0 client_is_recording=0 client_is_channel_commander=0 client_is_muted=0";		
		
		
		foreach(var item in input.Split(' '))
		{
			var variableAndValue = item.Split('=');
			Console.WriteLine("Name: {0}, Value: {1}", variableAndValue[0], variableAndValue[1]);
		}
			
	}

Dalej sobie poradzisz?

0

Rozumiem, że w ten sposób w "variableAndValue[0]" zapisze się przykładowo "clid" a w variableAndValue[1] przykładowo "1", tak?

Później normalnie zapisuję to sobie w swoje tablice?

No i kolejna rzecz. W tekście w client_nickname może występować znak "=".

@Edit

Druga sprawa. To nie wyłapie mi przypadkiem czegoś w stylu: "clid=" i "1 cid="?

1

string.Split dzieli ciag znakow na tablice podciagow, ktore sa rozdzielone stringiem separujacym.

Jezeli w client_nickname bedzie '=' to po prostu zamiast tablicy dwuelementowej dostaniesz tablice trojelementowa i w ten sposob jestes w stanie to wylapac.

Co do drugiego pytania to jesli jestes w stanie zapewnic, ze w zadnej z wartosci nie bedzie ' ' (znaku spacji) to wszystko bedzie dzialac dobrze bo najpierw dzielisz string wejsciowy po spacjach i dostajesz zawsze w wyniku ciagi "klucz=wartosc" i kazdy z tych ciagow rozbijasz po "=" na osobno klucz i osobno wartosc.

0

Niestety, aplikacja uzyskuje dane z klienta TeamSpeak, w którym to każdy może sobie dać dowolną ilość spacji w nazwie

@Edit

Dobra. Podsunęliście mi pomysł. Dzięki za pomoc. Temat do zamknięcia.

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