![]() |
Stringmanipulation
Hallo.
Ich suche eine Funktion zum extrahieren von Informationen aus einem String. Der fragliche String sieht so aus : Zitat:
Könntet ihr mir helfen? Ich sitze schon seit Stunden an Copy(),Pos(),Delete(), aber ich komme zu nichts Brauchbarem. Vielen Dank. |
Re: Stringmanipulation
Mit der Funktion PosEx kannst du dir da einiges erleichern. Oder du schaust dir mal reguläre Ausdrücke an, wozu du aber Fremdkomponenten installieren musst.
|
Re: Stringmanipulation
Genau: mit PosEx zum 3. Doppelpunkt, dann alles ab da bis zum ersten
kopieren, dann zum nächsten Doppelpunkt usw. Das geht aber in die Hose, wenn der variable String auch ein enthalten kann. |
Re: Stringmanipulation
Vielen Dank für die schnelle Antwort. Ich werde mir PosEx anschauen, hoffentlich hilft mir das weiter.
|
Re: Stringmanipulation
Delphi-Quellcode:
Ich komme absolut nicht Weiter.
procedure TForm1.TestClick(Sender: TObject);
var I1 : Integer; I2 : Integer; I3 : integer; I4 : Integer; I5 : Integer; Var1 : String; Var2 : String; Var3 : String; begin Down := 's:85:"Var1 : 3235019924 Var2 : Test1234 Var3 : Test123456 ";'; I1 := Pos('Var1 :',Down.Text); Var1 := Copy(Down,I1+8,I1+2); I2 := Pos(' Var2 : ',Down); I3 := Pos(' Var3 :',Down); Var2 := Copy(Down,I2+13,I3-38); I4 := Pos(' Var3 : ',Down); I5 := Pos(' ";',Down); Var3 := Copy(Down,I4+12,I5-76); Zitat:
Welche Fremdkomponenten meinst du? |
Re: Stringmanipulation
|
Re: Stringmanipulation
Außerdem sprachen wir nicht von Pos, sondern von PosEx.
|
Re: Stringmanipulation
Delphi-Quellcode:
type
TCustomConfig = class(TObject) protected procedure ReadValues(AValueList: TStrings); virtual; abstract; public procedure LoadFromStream(AStream: TStream); end; TConfig = class(TCustomConfig) private FVar1: string; FVar2: string; FVar3: string; protected procedure ReadValues(AValueList: TStrings); override; public property Var1: string read FVar1 write FVar1; property Var2: string read FVar2 write FVar2; property Var3: string read FVar3 write FVar3; end; implementation procedure TCustomConfig.LoadFromStream(AStream: TStream); var cfg, row, col: TStringList; i: Integer; begin col := nil; row := nil; cfg := TStringList.Create; try cfg.LineBreak := ';'; cfg.LoadFromStream(AStream); {1.Zeile} if cfg.Count >= 1 then begin row := TStringList.Create; row.QuoteChar := '"'; row.Delimiter := ':'; row.StrictDelimiter := True; row.DelimitedText := cfg[0]; {die ersten beiden Spalten ignorieren} if row.Count >= 2 then begin col := TStringList.Create; col.LineBreak := ' '; col.NameValueSeparator := ':'; col.Text := row[2]; {Leerzeichen entfernen} for i := 0 to col.Count - 1 do begin col[i] := Trim(col.Names[i]) + col.NameValueSeparator + Trim(col.ValueFromIndex[i]); end; {Werte übernehmen} ReadValues(col); end; end; finally col.Free; row.Free; cfg.Free; end; end; procedure TConfig.ReadValues(AValueList: TStrings); begin FVar1 := AValueList.Values['Var1']; FVar2 := AValueList.Values['Var2']; FVar3 := AValueList.Values['Var3']; end;
Delphi-Quellcode:
const
TextConfig = 's:85:"Var1 : 3235019924 Var2 : Test1234 Var3 : Test123456 ";'; CRLF = Char(13) + Char(10); procedure TForm1.TestClick(Sender: TObject); var Config: TConfig; Stream: TMemoryStream; begin Stream := TMemoryStream.Create; Stream.WriteBuffer(TextConfig, Length(TextConfig)); Stream.Seek(0, soFromBeginning); Config := TConfig.Create; Config.LoadFromStream(Stream); MessageBox(Handle, PChar(Config.Var1 + CRLF + Config.Var2 + CRLF + Config.Var3), 'Config', mb_Ok); Config.Free; Stream.Free; end; |
Re: Stringmanipulation
kleine Berichtigung:
Delphi-Quellcode:
{die ersten beiden Spalten ignorieren}
if row.Count >= 3 then |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 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