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.