AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte .csv Datei einlesen, analysieren und bearbeitet abspeichern.
Thema durchsuchen
Ansicht
Themen-Optionen

.csv Datei einlesen, analysieren und bearbeitet abspeichern.

Ein Thema von Dade · begonnen am 18. Apr 2015 · letzter Beitrag vom 4. Mai 2015
Antwort Antwort
Popov
(Gast)

n/a Beiträge
 
#1

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

  Alt 4. Mai 2015, 19:44
Ich hab eine Art Universal-Parser für Texte wie z. B. Metastase_LK_1_1_1_R_1 geschrieben. Man gibt nur 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.

Geändert von Popov ( 4. Mai 2015 um 21:33 Uhr) Grund: Eine kleine Erweiterung eingebaut
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#2

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

  Alt 4. Mai 2015, 20:50
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.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

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

  Alt 4. Mai 2015, 21:31
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 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 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.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#4

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

  Alt 4. Mai 2015, 21:53
Und wenn man das Konzept für einen zeilenbasierten "Universal-Parser" weiterverfolgt, kommt vermutlich irgendwann AWK raus
Wobei wir wieder bei "Delphi ist vermutlich nicht das Tool für den Job" sind ... SCNR
  Mit Zitat antworten Zitat
Benutzerbild von blondervolker
blondervolker

Registriert seit: 14. Sep 2010
Ort: Bei: Leeeiipzzhhh
381 Beiträge
 
Delphi XE2 Architect
 
#5

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

  Alt 4. Mai 2015, 23:05
Guten Abend,

vielleicht wäre das ja was:
https://www.tmssoftware.com/site/asg65.asp
www.bewerbungsmaker.de
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:28 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