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
Dade

Registriert seit: 18. Apr 2015
20 Beiträge
 
#1

.csv Datei einlesen, analysieren und bearbeitet abspeichern.

  Alt 18. Apr 2015, 14:59
HI Leute,
ich bin seit Tagen verzweifelt auf der Suche nach einer Möglichkeit, wie ich viele .csv - Dateien einlesen, einzelne Felder analysieren und alles dann als eine weitere Zeile in nur einer Excel Datei speichern kann.

Ich versuchte bereits Delphi zu lernen, da ich früher als Teenager mit Pascal programmierte, aber es hat sich doch sehr viel getan.


Ich hoffe sehr, dass ihr mir helfen könnt. Das wäre absolut toll.


Ich erkläre kurz worum es geht:
Ich bin an einem Projekt und nutze ein Programm, mit dem man Bilder ausmessen und Zellen zählen kann. Diese Ergebnisse werden mir als .csv - Datei ausgegeben. Insgesamt komme ich bestimmt am Ende auf über 1500 Dateien.
Diese sehen so aus:

--------------------
Annotations;;

Name;Perimeter (µm);Area (µm2)

LK_1_1_F_1;835,4;48705,5

LK_1_1_F_2;1142,7;93813,4

[.....ca. 20 Zeilen........]

LK_1_3;14272,3;7956108,4

;;

Distance measurement annotations;;

Length (µm);;

5,15;;

3,22;;

---------------------------------

Im Endeffekt müssen nun die Zahlen in bestimmter Art und Weise in der Excel Tabelle später stehen. Zusätzlich muss in der 1. Spalte jeweils der csv-Dateiname erscheinen (ist nämlich die Nummer) + die Angabe: LK_1_1_f_2 (als Beispiel von oben) analysiert werden nach "wie oft taucht "F" auf. Für jede .csv - Datei müssen die addiert und dann auch in einer Spalte stehen.

Ich habe hier vorher - Nachher + Erläuterungen hochgeladen: https://www.dropbox.com/sh/blbndn594...t68a?dl=0&s=sl

Alleine schaffe ich das nicht.

Gruß
Kai

Geändert von Dade ( 1. Mai 2015 um 12:45 Uhr)
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.929 Beiträge
 
FreePascal / Lazarus
 
#2

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

  Alt 18. Apr 2015, 16:17
naja, die einzelnen Files in ner Schleife durchgehen und darin bearbeiten.

gruss kh
Karl-Heinz
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

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

  Alt 18. Apr 2015, 20:30
Dade, ich will es nicht beschwören, aber ich denke mir der Ordner "Software-Projekte der Mitglieder" ist eher dafür gedacht, dass Mitglieder ihre Projekte vorstellen können, weniger, dass einer Aufgaben aufgibt.

Da es aber nicht wirklich großes ist, habe ich schnell etwas zusammen getippt. Das Programm macht aus allen CSV Dateien in einem Ordner eine einzige große CSV-Datei.

Beim programmieren bemerkte ich, das die CSV Dateien zwischen den einzelnen Dateien Leerzeilen haben. Die machen TStringList Probleme und lassen sich nicht ohne Probleme beseitigen. Ich hatte aber keine große Lust eine elegante Lösung zu finden, also habe es so gelassen und nur die Fehler ignoriert. Dabei werden keine Daten verschluckt, die Fehler gibt es nur bei den Leeren Zeilen. Auch gibt es nur in der IDE die Fehlermeldungen. Als Exe gestartet werden sie still ignoriert.

Vorausgesetzt alle Dateien sind nach dem gleichen Muster, so gibt es oben 2 und unten 5 Zeilen die u. U. ignoriert werden können. Wenn ja, am Anfang der Prozedur die Anzahl eintragen.
Delphi-Quellcode:
uses
  FileCtrl;

procedure GetFiles(Path, ExtMask: String; List: TStrings);
const
  Attrib = faArchive or faReadOnly or faHidden or faSysFile;
var
  SR: TSearchRec;
begin
  Path := IncludeTrailingBackslash(Path);

  while Copy(ExtMask, 1, 1) = '.do Delete(ExtMask, 1, 1);

  if FindFirst(Path + '*.' + ExtMask, Attrib, SR) = 0 then
  repeat
    if SameText('.' + ExtMask, ExtractFileExt(SR.Name)) then
      List.Add(Path + SR.Name);
  until FindNext(SR) <> 0;
  SysUtils.FindClose(SR);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  VorneZeilenIgnorieren,
  HintenZeilenIgnorieren,
  i, k: Integer;
  Dir, OutPath: String;
  slDateiListe, slGrosseCsv, slEinzelCsv, slTemp: TStringList;
begin
  VorneZeilenIgnorieren := 0; //2;
  HintenZeilenIgnorieren := 0; //5;

  if not SelectDirectory(Dir, [sdAllowCreate, sdPerformCreate, sdPrompt], 0) then
  begin
    MessageDlg('Kein Ordner ausgewählt.', mtError, [mbOk], 0);
    Exit;
  end;

  slDateiListe := TStringList.Create;
  try
    GetFiles(Dir, 'csv', slDateiListe);

    if slDateiListe.Count = 0 then
    begin
      MessageDlg('Kein Dateien gefunden.', mtError, [mbOk], 0);
      Exit;
    end
    else
      if MessageDlg(Format('%d CSV-Dateien gefunden. Weitermachen?', [slDateiListe.Count]),
        mtConfirmation, [mbYes, mbNo], 0) = mrNo then
          Exit;

    with SaveDialog1 do
    begin
      //Filter := 'CSV-Dateien|*.csv';
      if not Execute then
      begin
        MessageDlg('Vorgang Abgebrochen.', mtError, [mbOk], 0);
        Exit;
      end;
      OutPath := ChangeFileExt(FileName, '.csv');
      if FileExists(OutPath) then
        if MessageDlg('Datei bereits vorhanden. Überschreiben?.',
          mtConfirmation, [mbYes, mbNo], 0) = mrNo then
            Exit;;
    end;

    slGrosseCsv := TStringList.Create;
    try
      for i := 0 to slDateiListe.Count - 1 do
      begin
        slEinzelCsv := TStringList.Create;
        try
          slEinzelCsv.LoadFromFile(slDateiListe[i]);

          //In den csv-Dateien stimmt was nicht, zumindest kommt StringList
          //damit nicht klar. Schnelle Lösung. Es gibt fehlermeldungen, die
          //werden aber ignoriert.
          slTemp := TStringList.Create;
          try
            for k := 0 to slEinzelCsv.Capacity - 1 do
            try
              if Length(slEinzelCsv[k]) > 0 then
              slTemp.Add(slEinzelCsv[k]);
            except
              //Fehler Ignorieren
            end;
            slEinzelCsv.Text := slTemp.Text;
          finally
            slTemp.Free;
          end;

          //Entfernt vorne Zeilen, wenn gewünscht
          k := VorneZeilenIgnorieren;
          while (slEinzelCsv.Count > 0) and (k > 0) do
          begin
            slEinzelCsv.Delete(0);
            Dec(k);
          end;

          //Entfernt vorne Zeilen, wenn gewünscht
          k := HintenZeilenIgnorieren;
          while (slEinzelCsv.Count > 0) and (k > 0) do
          begin
            slEinzelCsv.Delete(slEinzelCsv.Count - 1);
            Dec(k);
          end;

          slGrosseCsv.AddStrings(slEinzelCsv);
        finally
          slEinzelCsv.Free;
        end;
      end;

      slGrosseCsv.SaveToFile(OutPath);
      MessageDlg('CSV-Dateien zusammengefügt und erfolgreich gespeichert ' +
        'unter: "' + OutPath + '".', mtInformation, [mbOk], 0);
    finally
      slGrosseCsv.Free;
    end;
  finally
    slDateiListe.Free;
  end;
end;
  Mit Zitat antworten Zitat
Dade

Registriert seit: 18. Apr 2015
20 Beiträge
 
#4

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

  Alt 18. Apr 2015, 21:54
Hi Popov,
vielen Dank für den Quellcode.

Da ich totaler Anfänger bin, habe ich folgendes versucht. Ich erstellte ein neues Projekt: (VCL Forms Application)

Darin habe ich einen tbutton eingefügt und per doppelklick geöffnet. Dann direkt da deinen Quellcode eingefügt. Bekomme viele Fehler.

Was mache ich falsch?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.342 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 18. Apr 2015, 21:59
Was mache ich falsch?
Du hast vergessen zu sagen was das für Fehler sind.

Und natürlich auch nicht erwähnt, welche Delphiversion du verwendest.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

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

  Alt 18. Apr 2015, 22:23
Darin habe ich einen tbutton eingefügt und per doppelklick geöffnet. Dann direkt da deinen Quellcode eingefügt. Bekomme viele Fehler
Wie ich schon oben geschrieben habe sind die Fehlermeldungen in der Entwicklungsumgebung normal. Startest das Programm über die EXE siehst du die Fehlermeldungen nicht.

Ich weiß nicht wieso TStringlist mit deinen CSV Dateien nicht klar kommt. Hab mir die Dateien im Hex-Editor angeguckt und da steht am Ende jeder Zeile #13#13#10. Da sollte nur #13#10 stehen. TStringList macht aus dem einzelnen #13 eine leere Zeile, hat aber Probleme sie zu löschen, warum auch immer. Irgendwie bring das den Count von TStringList durcheinander. Deshalb die Fehlermeldungen. Die kann man ignorieren.

Vielleicht kann hier einer Sagen wie man die Fehlermeldungen in der Entwicklungsumgebung abschalten kann. Da ich es schon lange nicht gemacht habe, habe ich es vergessen.

Wie auch immer, kompilieren und dann als Exe ausführen.

Geändert von Popov (18. Apr 2015 um 22:28 Uhr)
  Mit Zitat antworten Zitat
Dade

Registriert seit: 18. Apr 2015
20 Beiträge
 
#7

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

  Alt 18. Apr 2015, 22:26
Oh,
ja, also ich nutze: Delphi XE7 und bekam diese Fehler:


[dcc32 Error] Unit1.pas(28): E2029 Statement expected but 'USES' found
[dcc32 Error] Unit1.pas(29): E2003 Undeclared identifier: 'FileCtrl'
[dcc32 Error] Unit1.pas(31): E2070 Unknown directive: 'GetFiles'
[dcc32 Warning] Unit1.pas(33): W1002 Symbol 'faArchive' is specific to a platform
[dcc32 Warning] Unit1.pas(33): W1002 Symbol 'faHidden' is specific to a platform
[dcc32 Warning] Unit1.pas(33): W1002 Symbol 'faSysFile' is specific to a platform
[dcc32 Error] Unit1.pas(37): E2003 Undeclared identifier: 'Path'
[dcc32 Error] Unit1.pas(37): E2250 There is no overloaded version of 'IncludeTrailingBackslash' that can be called with these arguments
[dcc32 Warning] Unit1.pas(37): W1002 Symbol 'IncludeTrailingBackslash' is specific to a platform
[dcc32 Error] Unit1.pas(39): E2003 Undeclared identifier: 'ExtMask'
[dcc32 Error] Unit1.pas(39): E2008 Incompatible types
[dcc32 Error] Unit1.pas(41): E2010 Incompatible types: 'string' and 'Integer'
[dcc32 Error] Unit1.pas(43): E2250 There is no overloaded version of 'SameText' that can be called with these arguments
[dcc32 Error] Unit1.pas(44): E2003 Undeclared identifier: 'List'
[dcc32 Error] Unit1.pas(46): E2003 Undeclared identifier: 'SysUtils'
[dcc32 Error] Unit1.pas(49): E2070 Unknown directive: 'TForm1'
[dcc32 Error] Unit1.pas(60): E2003 Undeclared identifier: 'SelectDirectory'
[dcc32 Error] Unit1.pas(60): E2003 Undeclared identifier: 'sdAllowCreate'
[dcc32 Error] Unit1.pas(60): E2003 Undeclared identifier: 'sdPerformCreate'
[dcc32 Error] Unit1.pas(60): E2003 Undeclared identifier: 'sdPrompt'
[dcc32 Error] Unit1.pas(68): E2003 Undeclared identifier: 'GetFiles'
[dcc32 Error] Unit1.pas(80): E2003 Undeclared identifier: 'SaveDialog1'
[dcc32 Error] Unit1.pas(83): E2003 Undeclared identifier: 'Execute'
[dcc32 Error] Unit1.pas(88): E2003 Undeclared identifier: 'FileName'
[dcc32 Error] Unit1.pas(88): E2250 There is no overloaded version of 'ChangeFileExt' that can be called with these arguments
[dcc32 Fatal Error] Project1.dpr(5): F2063 Could not compile used unit 'Unit1.pas'


Damit bekomme ich bestimmt keine .exe.


So habe ich deinen Code eingesetzt in das Fenster, das kommt, wenn ich einen tbutton einfüge und diesen doppelt anklicke:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
uses
  FileCtrl;

procedure GetFiles(Path, ExtMask: String; List: TStrings);
const
  Attrib = faArchive or faReadOnly or faHidden or faSysFile;
var
  SR: TSearchRec;
begin
  Path := IncludeTrailingBackslash(Path);

  while Copy(ExtMask, 1, 1) = '.do Delete(ExtMask, 1, 1);

  if FindFirst(Path + '*.' + ExtMask, Attrib, SR) = 0 then
  repeat
    if SameText('.' + ExtMask, ExtractFileExt(SR.Name)) then
      List.Add(Path + SR.Name);
  until FindNext(SR) <> 0;
  SysUtils.FindClose(SR);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  VorneZeilenIgnorieren,
  HintenZeilenIgnorieren,
  i, k: Integer;
  Dir, OutPath: String;
  slDateiListe, slGrosseCsv, slEinzelCsv, slTemp: TStringList;
begin
  VorneZeilenIgnorieren := 0; //2;
  HintenZeilenIgnorieren := 0; //5;

  if not SelectDirectory(Dir, [sdAllowCreate, sdPerformCreate, sdPrompt], 0) then
  begin
    MessageDlg('Kein Ordner ausgewählt.', mtError, [mbOk], 0);
    Exit;
  end;

  slDateiListe := TStringList.Create;
  try
    GetFiles(Dir, 'csv', slDateiListe);

    if slDateiListe.Count = 0 then
    begin
      MessageDlg('Kein Dateien gefunden.', mtError, [mbOk], 0);
      Exit;
    end
    else
      if MessageDlg(Format('%d CSV-Dateien gefunden. Weitermachen?', [slDateiListe.Count]),
        mtConfirmation, [mbYes, mbNo], 0) = mrNo then
          Exit;

    with SaveDialog1 do
    begin
      //Filter := 'CSV-Dateien|*.csv';
      if not Execute then
      begin
        MessageDlg('Vorgang Abgebrochen.', mtError, [mbOk], 0);
        Exit;
      end;
      OutPath := ChangeFileExt(FileName, '.csv');
      if FileExists(OutPath) then
        if MessageDlg('Datei bereits vorhanden. Überschreiben?.',
          mtConfirmation, [mbYes, mbNo], 0) = mrNo then
            Exit;;
    end;

    slGrosseCsv := TStringList.Create;
    try
      for i := 0 to slDateiListe.Count - 1 do
      begin
        slEinzelCsv := TStringList.Create;
        try
          slEinzelCsv.LoadFromFile(slDateiListe[i]);

          //In den csv-Dateien stimmt was nicht, zumindest kommt StringList
          //damit nicht klar. Schnelle Lösung. Es gibt fehlermeldungen, die
          //werden aber ignoriert.
          slTemp := TStringList.Create;
          try
            for k := 0 to slEinzelCsv.Capacity - 1 do
            try
              if Length(slEinzelCsv[k]) > 0 then
              slTemp.Add(slEinzelCsv[k]);
            except
              //Fehler Ignorieren
            end;
            slEinzelCsv.Text := slTemp.Text;
          finally
            slTemp.Free;
          end;

          //Entfernt vorne Zeilen, wenn gewünscht
          k := VorneZeilenIgnorieren;
          while (slEinzelCsv.Count > 0) and (k > 0) do
          begin
            slEinzelCsv.Delete(0);
            Dec(k);
          end;

          //Entfernt vorne Zeilen, wenn gewünscht
          k := HintenZeilenIgnorieren;
          while (slEinzelCsv.Count > 0) and (k > 0) do
          begin
            slEinzelCsv.Delete(slEinzelCsv.Count - 1);
            Dec(k);
          end;

          slGrosseCsv.AddStrings(slEinzelCsv);
        finally
          slEinzelCsv.Free;
        end;
      end;

      slGrosseCsv.SaveToFile(OutPath);
      MessageDlg('CSV-Dateien zusammengefügt und erfolgreich gespeichert ' +
        'unter: "' + OutPath + '".', mtInformation, [mbOk], 0);
    finally
      slGrosseCsv.Free;
    end;
  finally
    slDateiListe.Free;
  end;
end;
end;

Geändert von Dade (18. Apr 2015 um 23:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von frankyboy1974
frankyboy1974

Registriert seit: 7. Apr 2015
Ort: SH
169 Beiträge
 
Delphi XE7 Professional
 
#8

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

  Alt 2. Mai 2015, 13:11
Hallo,

ich habe hier mal eine etwas ernsthaftere Lösung für dich, wobei ich das Problem ungefähr bis zur 4. Spalte gelöst habe. Den Rest darfst du dann selbst ergänzen. Ich hoffe ich habe alles richtig verstanden.

Delphi-Quellcode:
unit Unit16;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm16 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form16: TForm16;

implementation

{$R *.dfm}

procedure TForm16.Button1Click(Sender: TObject);
var
  SR: TSearchRec;
  eingangsverzeichnis, ausgangsverzeichnis: String;
  ein, aus: TStringlist;
  h, Dateiname: String;
  I: Integer;
  zaehler: Array [1 .. 50] of Integer;
  // Ich habe 50 Zaehlvariablen angelegt , sollte ausreichend sein
  keimzentren: Array [1 .. 3] of String; // ich bin von 3 LK ausgegangen
  seperator: String;
  Dateizaehler:Integer;
begin
  seperator := ';';
  Dateizaehler:=0;
  eingangsverzeichnis := 'C:\Users\Frank\Eingang\';
  // Verzeichnis in dem sich die Ursprungs-CSV Dateien befinden
  ausgangsverzeichnis := 'C:\Users\Frank\Ausgang\';
  // Verzeichnis in dem sich am Ende die aufbereiteten Dateien befinden, wird ggf. angeleget
  ein := TStringlist.Create; // Aktuelle EingabeDatei
  aus := TStringlist.Create; // Ausgabe Datei
  try
    if FindFirst(eingangsverzeichnis + '*.csv', faAnyFile, SR) = 0 then
    // Durchsucht das Eingangsverzeichnis nach alle CSV -Dateien und iteriert über die Menge
    begin
      repeat
        if (SR.Attr <> faDirectory) then
        // Es werden keine Untergeordneten Verzeichnisse mit genommen
        begin
          Dateiname := SR.Name; // Weist den aktuelle Dateiname zu
          ein.LoadFromFile(eingangsverzeichnis + Dateiname);
          // Lädt den Inhalt der aktuellen Datei in eine Stringlist
          for I := 1 to 50 do // Alle Zaehlvariablen
            zaehler[I] := 0; // werden bei einer neuen Datei mit null vorbelegt
          aus.Clear; // Ausgabedatei wird geleert
          for I := 0 to ein.Count - 1 do
          begin // Iteriert ueber die Strings in der Stringlist
            h := ein.Strings[I]; // aktuelle String wird h zugewiesen
            if pos('LK_1_1_F', h) > 0 then
              inc(zaehler[1]);
            // Sofern in dem aktuelle String der Teilstring 'LK_1_1_F' gefunden (>0)
            // so wird der entsprechende Zaehler um eins erhöht
            if pos('LK_1_2_F', h) > 0 then
              inc(zaehler[2]);
            // Sofern in dem aktuelle String der Teilstring 'LK_1_2_F' gefunden (>0)
            // so wird der entsprechende Zaehler um eins erhöht
            if pos('LK_1_2_F', h) > 0 then
              inc(zaehler[3]);
            // Sofern in dem aktuelle String der Teilstring 'LK_1_3_F' gefunden (>0)
            // so wird der entsprechende Zaehler um eins erhöht

            if pos('LK_1_1_K', h) > 0 then
              inc(zaehler[4]);
            // Sofern in dem aktuelle String der Teilstring 'LK_1_1_K' gefunden (>0)
            // so wird der entsprechende Zaehler um eins erhöht
            if pos('LK_1_2_K', h) > 0 then
              inc(zaehler[5]);
            // Sofern in dem aktuelle String der Teilstring 'LK_1_2_K' gefunden (>0)
            // so wird der entsprechende Zaehler um eins erhöht
            if pos('LK_1_3_K', h) > 0 then
              inc(zaehler[6]);
            // Sofern in dem aktuelle String der Teilstring 'LK_1_3_K' gefunden (>0)
            // so wird der entsprechende Zaehler um eins erhöht

            // Es werden bis hierhin die Anzahl der Keimzentren berechnet
            // Die fehlenden Spalten müssten ergänzt werden
          end;// Ende For Schleife
          // Die Datei ist jetzt durchlaufen und das Ergebnis wird in eine neue Datei geschrieben
          aus.Add('Fallnummer' + seperator + 'Lymphknoten' + seperator +
            'hier bitte die Überschriften ergänzen jeweils durch seperator getrennt');
          if zaehler[4] > 0 then
          // Sofern Zaehler[4] > Null Keimzentrenvorhanden auf 1 setzen
            keimzentren[1] := '1'
          else
            keimzentren[1] := '0'; // Ansonsten auf Null
          if zaehler[5] > 0 then
            keimzentren[2] := '1'
          else
            keimzentren[2] := '0';
          if zaehler[6] > 0 then
            keimzentren[3] := '1'
          else
            keimzentren[3] := '0';
          aus.Add(stringreplace(Dateiname, '.csv', '', [rfignorecase]) +
            seperator + 'LK_1_1' + seperator + inttostr(zaehler[1]) + seperator
            + keimzentren[1] + seperator + inttostr(zaehler[4]));
          // Diese Zeilen sind nach hinten noch zu ergänzen
          aus.Add(stringreplace(Dateiname, '.csv', '', [rfignorecase]) +
            seperator + 'LK_1_2' + seperator + inttostr(zaehler[2]) + seperator
            + keimzentren[2] + seperator + inttostr(zaehler[5]));
          // Diese Zeilen sind nach hinten noch zu ergänzen
          aus.Add(stringreplace(Dateiname, '.csv', '', [rfignorecase]) +
            seperator + 'LK_1_3' + seperator + inttostr(zaehler[3]) + seperator
            + keimzentren[3] + seperator + inttostr(zaehler[6]));
          // Diese Zeilen sind nach hinten noch zu ergänzen
          ForceDirectories(ausgangsverzeichnis);
          // Erzeugt ggf Ausgabeverzeichnis falls noch nicht vorhanden
          aus.SaveToFile(ausgangsverzeichnis + Dateiname);
          // AusgabeDatei wird im Ausgabeverzeichniss mit dem Originalnamen gespeichert
          inc(Dateizaehler);
        end;
      until FindNext(SR) <> 0;
      // Finden die nächste CSV und springt nach oben , solange noch welche vorhanden
      FindClose(SR); // Schliesst den Suchvorgang
    end;
    showmessage('Fertig! Es wurden '+inttostr(Dateizaehler)+' Dateien konvertiert.');
  finally
    ein.Free; // Stringlist wieder freigeben , ansonsten Speicherleak :-))))
    aus.Free; // Welch Katastrophe 100 Bytes reserviert und nicht wieder zu verwenden
  end;

end;

end.
Hat mich knapp eine Stunde gekostet.

mfg

Frank
Java ist auch eine Insel.
Ist Delphi von Oracle?
In meiner Buchstabensuppen fehlt das C++!
  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 13:36 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