# String effektiv parsen



## dadevelopa (17. November 2005)

Hallo zusammen,
ich suche eine möglichkeit einen ziemlich langen String effektiv zu parsen.

Der String sieht folgendermassen aus:

/username/host/time/telp/telg/telh/floor/officeNo@/username/host/time/telp/telg/telh/floor/officeNo@....

Die Zeichen von einem @ bis zu einem @ stellen jeweils ein Datensatz dar.
Die Zeichen zwischen '/' und '/' jeweils einen Eintrag in diesem Datensatz.

Dieser String soll nun in eine Verkettete Liste gespeichert werden, deren Struktur folgendermassen aussieht:


```
struct datensatz {
	char user[50]; 
	char host[50];
	char idle[50];
	char officeNo[5];
	char floor[10];
	char telP[20];
	char telG[20];
	char telH[20];
	int id;
	struct datensatz *next;
	struct datensatz *prev;
};
```

Hat jemand von euch so etwas schon einmal gemacht, oder zumindest eine Idee wie ich dieses Problem angehen koennte?


----------



## Thomas Kuse (17. November 2005)

Du "läufst" Deinen String mit einem Char-Pointer ab und vergleichst immer das aktuelle Zeichen auf "/" oder "@", halt so wie du das brauchst.
 Die Inhalte zwischen den Zeichen speicherst Du in die aktuelle Struktur.
 Wenn Du das "@" erreicht hast fängt die Schleife wieder von vorne an, ohne aber den Pointer zurückzusetzen.

 Du kannst allerdings auch mit der String-Funktion split, deinen grossen String in einzelne aufteilen (z.B. durch "@") und dann die einzelnen wieder mit Split (durch "/") teilen und in der Struktur speichern.

 Ich denke mal das ist recht einfach, ausser Du hast vergessen ein paar Vorbedingungen zu erwähnen auf die beim Zerlegen geachtet werden muss.


----------



## jokey2 (17. November 2005)

Ich würde die 2. Möglichkeit bevorzugen. Du suchst im 'Hauptstring' nach @, holst Dir den Substring und suchst darin nach /, um die Felder zu extrahieren.


----------



## Thomas Kuse (17. November 2005)

Da er aber oben von effektiv gesprochen hat, wäre die erste Methode die wahrscheinlich schnellere, da jeder Char nur genau einmal "angefasst" und verglichen wird, wohingegen beim mehrmaligen Split jeder Teilstring auch mehrmals auf die unterschiedlichen Trenner verglichen wird.

 Programmiertechnisch finde ich die 2. Lösung aber auch schneller und einfacher zu programmieren!


----------

