Das mit der dritten Stinglist war Quatsch von mir, da ja aus der zweiten indexfähigen Stinglist die Textdatei gebaut wird. Vielen Dank nochmal, es klappt prima.
Das Tool soll eine Schnittstelle zwischen einem ERP und CAQ System realisieren. Wenn ein CNC Bediener einen neuen Auftrag beginnt wird ein Barcode gescannt um dann diese SPC Datei mit Infos über Auftragsnummer, Artikelnummer usw. erzeugen. Das CAQ System importiert diese Daten und erzeugt einen Prüfauftrag auf einem Messrechner mit angeschlossenen Messmitteln um die Teile zu vermessen und überprüfen. Das alte CAQ System wird abgelöst und das neue braucht die Daten in einer anderen definierten Reihenfolge und mit zusätzlichen Werten. Dies wird tatsächlich teilweise immer noch mit kleinen Textfiles realisiert.
Eigentlich bin ich Instandhalter/IT'ler und pflege nur den ERP/CAQ Server und repariere die CNC-Maschinen aber mich hat das Thema interessiert, da ich in meiner Technikerausbildung vor 15 Jahren mal mit Delphi programmiert habe. Leider bin ich wie beim Arduino/ESP eher der Codebettler- und klauer.
Das Tool schreibe ich in meiner Freizeit und bekomme keine Entlohnung dafür und ein Verbesserungswesen gibt es auch nicht. Ich sehe es als Hobby an wie Sodoku um nicht einzurosten und vielleicht hilft es ja mal jemand anderen der ein ähnliches Problem mit txt Schnittstellen hat.
Die nächste Hürde für heute Abend wird das Laden der realen Datei werden. Es soll ein Verzeichnis überwacht werden wo Dateien sporadisch ankommen welche einen Zähler im Dateinamen beinhalten. Also immer unterschiedlich heissen.
SPC0001.txt
SPC0002.txt
SPC0003.txt
Nach dem Bearbeiten wird die Quell-Datei gelöscht und die veränderte Ziel-Datei woanders geschrieben. Versuchen werde ich es mit FindFirst und FindNext bis das Verzeichnis leer ist.
Da es nicht zeitkritisch ist dachte ich an alle 2 Minuten für die Überprüfung ob was da ist.
Delphi-Quellcode:
procedure logdatei(Uebergabe:
String);
var
f : TextFile;
begin
AssignFile(f, '
SPC.log');
//SPC.log muss vorhanden sein vor dem ersten Start quick and dirty
Append(f);
writeln(f, Uebergabe);
CloseFile(f);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
sl,slZeile : tstringlist;
zeile : Integer;
Auftragsnummer, Artikelnummer, Messstation, Kapazitaet :
String;
Datei : TextFile;
Filename :
String;
Datum :
String;
log :
String;
begin
sl := TStringList.Create;
try
sl.LoadFromFile('
SPC.txt');
for zeile:=0
to sl.Count -1
do
begin
slZeile := TStringList.Create;
try
slZeile.Delimiter := '
;';
slZeile.DelimitedText := sl[zeile];
Auftragsnummer := slZeile.Strings[0];
Artikelnummer := slZeile.Strings[1];
Messstation := slZeile.Strings[2];
Kapazitaet := slZeile.Strings[3];
finally
Datum := FormatDateTime('
yyyy_mm_dd__hh_mm_ss', Now);
Filename := '
bdecn.' + Datum + '
.dat';
log := Datum+'
'+slZeile.DelimitedText;
if Messstation = '
RB'
then
begin
Meldung.Caption := '
skip RB';
//zu Testzweck später löschen
logdatei(log);
end
else
if Messstation = '
CNC-FB'
then
begin
Meldung.Caption := '
skip CNC-FB';
//zu Testzweck später löschen
logdatei(log);
end
else
begin
Meldung.Caption := '
Datei ok';
//zu Testzweck später löschen
logdatei(log);
AssignFile(Datei, Filename);
Rewrite(Datei);
write(Datei, Artikelnummer);
write(Datei, '
;');
write(Datei, '
10');
write(Datei, '
;');
write(Datei, Kapazitaet);
write(Datei, '
;');
write(Datei, '
1');
write(Datei, '
;');
write(Datei, '
1');
write(Datei, '
;');
write(Datei, '
;');
write(Datei, Auftragsnummer);
write(Datei, '
;');
CloseFile(Datei);
slZeile.Free;
end;
end;
end;
finally
sl.Free;
end;
end;