Delphi-PRAXiS
Seite 7 von 7   « Erste     567   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   .csv Datei einlesen, analysieren und bearbeitet abspeichern. (https://www.delphipraxis.net/184749-csv-datei-einlesen-analysieren-und-bearbeitet-abspeichern.html)

Dejan Vu 4. Mai 2015 19:18

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Zitat:

Zitat von jobo (Beitrag 1300137)
Vielleicht schießt Du da etwas übers Ziel hinaus.
Es ist nicht seine Doktorarbeit....

Deswegen: *WENN*, also: IF---THEN ;-)

Ich hatte das im Vorüberfliegen so interpretiert. Aber eben nur im Vorüberfliegen.
Zitat:

Zitat von Bjoerk (Beitrag 1300154)
Dejan Vu, das ist nun wirklich Quark. Ein Mediziner weiß normalerweise nicht mal was eine csv Datei ist? ...

Nein Nein. Falsch verstanden: Hier nochmal

Delphi-Quellcode:
If TheThreadErsteller.WantsTo.Make.His.(Doktorarbeit) Then
  TheThreadErsteller.HasHimSelfNotReallyGoodVorbereitet := True
Else
  Writeln('Welcome in the realität [Forschungseinrichtung ohne IT]. We help gerne');
Der 'else Zweig' ist nachträglich reingebaut, ansonsten ist es eine einfache Implikation, die komischerweise immer misverstanden wird. Ich hätts wissen müssen

Popov 4. Mai 2015 19:44

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:
GetCode('LK', 'Metastase_LK_1_1_1_R_1')
und den gesuchten Code ein, z. B. LK und die Funktion liefert einen Array of Word mit den passenden Werten zurückt.

Delphi-Quellcode:
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;
Soviel ohne genau zu wissen um was es da geht.

Bjoerk 4. Mai 2015 20:50

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Zitat:

Zitat von Popov (Beitrag 1300222)
Ich hab eine Art Universal-Parser für Texte wie z. B. Metastase_LK_1_1_1_R_1 geschrieben. [..]

Toller "Universalparser"? Macht aus Metastase_LK_1_1_1_R_1 LK 1 1 1. Das R1 kommt gar nicht mehr vor? Besser wäre hier einfach eine Splitsting mit _ als Delimiter. :wink:

Popov 4. Mai 2015 21:31

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Zitat:

Zitat von Bjoerk (Beitrag 1300225)
Toller "Universalparser"? Macht aus Metastase_LK_1_1_1_R_1 LK 1 1 1. Das R1 kommt gar nicht mehr vor?

Das hast du richtig erkannt. Das ist Absicht.

Um LK Werte zu ermitteln, rufst du
Delphi-Quellcode:
GetCode('LK', 'LK_1_1_1_R_1');
auf. Als Ergebnis bekommst du nur die Werte die zu LK gehören.

Um R Werte zu ermitteln, rufst du
Delphi-Quellcode:
GetCode('R', 'LK_1_1_1_R_1');
auf. Als Ergebnis bekommst du die Werte die zu R gehören.

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.

BUG 4. Mai 2015 21:53

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Und wenn man das Konzept für einen zeilenbasierten "Universal-Parser" weiterverfolgt, kommt vermutlich irgendwann AWK raus :mrgreen:
Wobei wir wieder bei "Delphi ist vermutlich nicht das Tool für den Job" sind ... SCNR

blondervolker 4. Mai 2015 23:05

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Guten Abend,

vielleicht wäre das ja was:
https://www.tmssoftware.com/site/asg65.asp


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:26 Uhr.
Seite 7 von 7   « Erste     567   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz