![]() |
string zerlegen
Delphi-Quellcode:
Nach dem Durchlauf ist in re_a-Lines.Strings[Count - 1] (letzte Eintrag) nur noch folgender String drin :-)
sl_e.LoadFromStream(Temp);
sl_TMP.StrictDelimiter := true; sl_TMP.Delimiter := '#'; for a := 0 to sl_e.Count - 1 do begin sl_tmp.DelimitedText := sl_e.Strings[a]; for b := 1 to sl_tmp.Count - 1 do begin s := s + ' ' + sl_e.Strings[0]; end; re_a.Lines.Add(s); sl_tmp.Clear; s := ''; end; D: { 59789999999999 { 555aaa666bbb777ccc }} Ich möchte jetzt aus diesem String, nur noch den Wert 555aaa666bbb777ccc rausholen und einer Variable übergeben. Dieser Wert ist immer anders! Das einzige was immer gleich ist sind die Klammern "{" und "}}" sowie das "D:" Ich weis das man dies mit "pos" und "copy" lösen könnte aber ich stoß dabei an meine Grenzen :-) Vielleicht könnt ihr ja ein wenig helfen:-) |
Re: string zerlegen
Delphi-Quellcode:
Vermutlich kommt es so nicht ganz hin, ist ungetestet, musst noch ein wenig mit rumexperimentieren. PosEx ist in der Unit StrUtils, die musst du noch einbinden.
NewString := Copy(OldString, PosEx('{', OldString, Pos('{', OldString)+1), Length(OldString));
NewString := Copy(NewString,1, Length(NewString)-3); |
Re: string zerlegen
Also die richtigen Ansätze hast Du dir selber schon gegeben :-D
Ich weiß nur nicht, wo man bei copy eine Grenze haben kann Zitat:
Zitat:
Delphi-Quellcode:
bzw. bei dir ja ehr:
copy('D: { 59789999999999 { 555aaa666bbb777ccc }}',23,18);
Delphi-Quellcode:
Ich hoffe, ich habe mich nicht verzählt bei Count und Index, falls doch vergib' mir bitte um diese Uhrzeit...
copy(re_a-Lines.Strings[Count - 1],23,18);
mfg Bastler P.S.: Falls diese Nummer "59789999999999" nich immer die gleiche Länge hat, musst du den Beginn des relevanten Terms durch eine If-Bedingung und den geschweiften Klammern feststellen... falls es dazu Fragen gibt, einfach nochmal posten... |
Re: string zerlegen
:? mist zu langsam... naja kommt ja auch das gleiche hinaus...
OT: Warum wurde ich nicht drauf hingewiesen vor dem Abschicken? ist das Script ausgeschaltet/kaputt? |
Re: string zerlegen
Da es nicht mal in Delphi 6 die Funktion PosEx gibt hier noch eine andere Variante.
Delphi-Quellcode:
var
LPos, Rpos: word; begin //st= 'D: { 59789999999999 { 555aaa666bbb777ccc }}'; LPos:= LastDelimiter('{', st); Rpos:= Pos('}}', st); caption:= Copy(st, Lpos+ 2, Rpos- LPos- 3); |
Re: string zerlegen
Zitat:
"inherited" dein Code klappt bestens hier die Änderungen noch
Delphi-Quellcode:
sOld := re_a-Lines.Strings[Count - 1];
sNew := Copy(sOld, PosEx('{', sOld, Pos('{', sOld)+1), Length(sOld)); sNew := Copy(sNew,3, Length(sNew)-6); Jetzt erhalte ich exakt 555aaa666bbb777ccc ohne Leerzeichen am Ende oder sonstiges, nur verstehen tu ich den Code nicht ganz. Vielleicht könntet ihr ihn Schritt für Schritt verständlich Dokumentieren. |
Re: string zerlegen
Moin,
man kann das auch ein wenig übersichtlicher schreiben (ich hoffe, ich vertu mich da nicht):
Delphi-Quellcode:
Wobei man die letzten beiden Code-Zeilen auch zusammenfassen könnte zu:
// Position der 1. '{':
geschwKlammerAuf1 := Pos('{', OldString); // Position der 2. '{' (gesucht wird ab dem Folgeindex der 1. '{'): geschwKlammerAuf2 := PosEx('{', OldString, geschwKlammerAuf1 + 1); // Kopiert die Zeichen ab der 2. '{' bis zum Stringende: NewString := Copy(OldString, geschwKlammerAuf2, Length(OldString)); // Kopiert die Zeichen vom Anfang des Strings bis zum drittletzten Zeichen: NewString := Copy(NewString, 1, Length(NewString)-3);
Delphi-Quellcode:
wenn ich das richtig sehe. Hab's aber nicht getestet.
NewString := Copy(OldString, geschwKlammerAuf2, Length(OldString) - 3);
Grüße |
Re: string zerlegen
aber sag mal, weshalb nimmste nicht die funktion von bitsetter? die funktioniert ja auch unter D5
Delphi-Quellcode:
Aufruf:
function LastString(aSTring: pChar; aLeftDelimiter, aRightDelimiter: string): string;
begin result := ''; //Rückgabewert Leerstring, falls Fehler aufgetreten inc(aString, LastDelimiter(aLeftDelimiter, aString)); result := trim(copy(aString, 1, pos(aRightDelimiter, aString)-1)); end;
Delphi-Quellcode:
DeinZielString := LastString('D: { 59789999999999 {555aaa666bbb777ccc}}', '{', '}');
|
Re: string zerlegen
Hallo,
sogar die interne Zerlegung älterer StringList-Implementierungen erledigt das:
Delphi-Quellcode:
Frohe Weihnachten
function ExtractField(const s: string; index: Integer): string;
begin with TStringList.Create do try CommaText := s; Result := Strings[index]; finally Free; end; end; procedure TDemoForm.ButtonClick(Sender: TObject); begin ShowMessage(ExtractField('D: { 59789999999999 { 555aaa666bbb777ccc }}', 4)); end; |
Re: string zerlegen
Zitat:
---------------------------------------------------------------------------------------------------------------------- Ein Danke an "Matze" für die Erklärung und auch ein Dank an allen anderen die geholfen haben. Ich wünsche euch noch eine frohe Weihnacht :) und ein guten Rutsch ins neue Jahr |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz