Probleme mit Stringlist->DelimitedText
-
Hallo allerseits!
Ich bastele gerade mit TStringList herum. Ich lese dazu aus einer INI Strings aus, die ungefähr wie folgt aussehen:
job_2=4;Clean;;1;05.05.2004 13:28:00;1;0;0;;0
Wie man sehen kann, sind darin einzelne Teilstrings durch ";" getrennt. Ich versuche nun mit dem folgenden Code die Teilstrings auszulesen:
TStringList *slJobParams; slJobParams = new TStringList(); slJobParams->Delimiter = ';'; for (int i=0; i<iJobCount; i++) { slJobParams->Clear(); slJobParams->DelimitedText = IniFile->ReadString("jobs", "job_"+IntToStr(i+1), ""); Job = new TJobObject(this); Job->iId = i+1; // Job-Id Job->iJobType = slJobParams->Strings[0].ToIntDef(-1); Job->sJobName = slJobParams->Strings[1]; Job->sFile = slJobParams->Strings[2]; Job->iJobCycle = slJobParams->Strings[3].ToIntDef(0); Job->dtNextJobExecuteTime = StrToDateTime(slJobParams->Strings[4]); Job->bExecuted = (slJobParams->Strings[5].ToIntDef(-1) == 0) ? false : true; Job->iJobExecuteDay = slJobParams->Strings[6].ToIntDef(0); Job->iDBDumpMode = slJobParams->Strings[7].ToIntDef(0); Job->sParam = slJobParams->Strings[8]; Job->iCleanup = slJobParams->Strings[9].ToIntDef(0); JobListeWork->Add(Job); }Das Problem ist nun, dass in der INI Strings drinstehen, die Leerzeichen enthalten (z.B.: 05.05.2004 13:28:00). TStringlist trennt an diesen Stellen den Teilstring auf, als ob dort ein ";" stehen würde und das Auslesen des Teilstrings klappt nicht mehr. Hat jemand einen Vorschlag wie man das unterdrücken könnte?
-
Das ist eine Eigenheit, die auch schon bei CommaText auftrat/auftritt. Da hilft nur, die Teilstrings jeweils in Anführungszeichen einzupacken.
Alternativ kannst du dir auch mal ExtractStrings() ansehen. Allerdings werden leere (Teil)Strings hier ignoriert, und deine Daten scheinen ja solche Leer-Strings zu enthalten (;;).
-
Hab sowas ähnliches umgangen, indem ich Leerzeichen vorher im String immer durch ein anderes Zeichen ersetzt habe.
inp = StringReplace(inp," ","\"",TReplaceFlags() << rfReplaceAll);Und dann nachdem der String zerlegt ist, wieder Zeichen mit Leerzeichen ersetzen.
Zwar nicht schön, aber ...
-
Yo. danke Euch beiden. Ich ersetze jetzt mit StringReplace alle " " durch "#EMPTY#".
