![]() |
AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
Zitat:
Ich hatte das im Vorüberfliegen so interpretiert. Aber eben nur im Vorüberfliegen. Zitat:
Delphi-Quellcode:
Der 'else Zweig' ist nachträglich reingebaut, ansonsten ist es eine einfache Implikation, die komischerweise immer misverstanden wird. Ich hätts wissen müssen
If TheThreadErsteller.WantsTo.Make.His.(Doktorarbeit) Then
TheThreadErsteller.HasHimSelfNotReallyGoodVorbereitet := True Else Writeln('Welcome in the realität [Forschungseinrichtung ohne IT]. We help gerne'); |
AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
Ich hab eine Art Universal-Parser für Texte wie z. B. Metastase_LK_1_1_1_R_1 geschrieben. Man gibt nur
Delphi-Quellcode:
und den gesuchten Code ein, z. B. LK und die Funktion liefert einen Array of Word mit den passenden Werten zurückt.
GetCode('LK', 'Metastase_LK_1_1_1_R_1')
Delphi-Quellcode:
Soviel ohne genau zu wissen um was es da geht.
type
TCodeW = array of Word; TCode = record CodeS: string; CodeW: TCodeW; Count: Integer; CodeSExists: Boolean; end; function GetCode(ACodeS, AText: string): TCode; function GetNum(var s: string): Integer; var sTemp: string; begin while (Length(s) > 0) and not (s[1] in ['0'..'9']) do Delete(s, 1, 1); sTemp := ''; while (Length(s) > 0) and (s[1] in ['0'..'9']) do begin sTemp := sTemp + s[1]; Delete(s, 1, 1); end; if Length(sTemp) > 0 then Result := StrToInt(sTemp) else Result := -1; end; var i, p: Integer; w: Integer; sTemp: String; begin with Result do begin CodeS := AnsiUpperCase(ACodeS); SetLength(CodeW, 0); Count := 0; CodeSExists := False; //Evtl. ist es besser nach CodeS + '_' zu suchen, falls immer ein '_' folgt. p := Pos(CodeS, AnsiUpperCase(AText)); //p := Pos(CodeS + '_', AnsiUpperCase(AText)); CodeSExists := p > 0; if not CodeSExists then Exit; sTemp := ''; for i := p + Length(CodeS) to Length(AText) do if AText[i] in ['0'..'9', '_'] then sTemp := sTemp + AText[i] else Break; repeat w := GetNum(sTemp); if w > - 1 then begin Inc(Count); SetLength(CodeW, Count); CodeW[Count - 1] := w; end; until w < 0; end; end; procedure TForm1.Button1Click(Sender: TObject); var Code: TCode; i: Integer; begin Code := GetCode('L', 'Metastase_LK_1_1_1_R_1'); ShowMessage('Gesuchter Code: ' + Code.CodeS); if Code.CodeSExists then ShowMessage('Text "' + Code.CodeS + '" ist im String vorhanden') else ShowMessage('Text "' + Code.CodeS + '" ist im String nicht vorhanden'); ShowMessage('Anzahl: ' + IntToStr(Code.Count)); for i := 0 to Code.Count - 1 do ShowMessage('Wert: ' + IntToStr(i + 1) + ' = ' + IntToStr(Code.CodeW[i])); end; |
AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
Zitat:
|
AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
Zitat:
Um LK Werte zu ermitteln, rufst du
Delphi-Quellcode:
auf. Als Ergebnis bekommst du nur die Werte die zu LK gehören.
GetCode('LK', 'LK_1_1_1_R_1');
Um R Werte zu ermitteln, rufst du
Delphi-Quellcode:
auf. Als Ergebnis bekommst du die Werte die zu R gehören.
GetCode('R', 'LK_1_1_1_R_1');
Du bekommst also nicht alles in einem Rutsch gesplittet zurück, sondern immer nur die Werte zu dem gesuchten Parameter gehören. Du musst in einer Routine also alles abrufen. Willst du die Werte zu LK wissen, rufst du die Funktion mit LK auf, bei R zu R, usw. Aber mir ist noch eine kleine Idee dazugekommen. |
AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
Und wenn man das Konzept für einen zeilenbasierten "Universal-Parser" weiterverfolgt, kommt vermutlich irgendwann
![]() Wobei wir wieder bei "Delphi ist vermutlich nicht das Tool für den Job" sind ... SCNR |
AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:57 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