Hallo Chemiker,
das kann eventuell möglich sein, die Daten schreibe ich Parallel auch in ein Memo, aber genau so wie sie kommen,
siehe Code
Delphi-Quellcode:
procedure TForm1.DatenverarbeitungMB256;
Var
Datum :
String;
Jahr :
String;
Monat :
String;
Sicherung :
String;
Übergabe :Integer;
SL :TStringList;
I :Integer;
IA :Integer;
IB :Integer;
IC :Integer;
ID :Integer;
N :Integer;
begin
Datum := DatetoStr(Date);
Jahr := FormatDateTime('
yyyy',strtodatetime(Datum));
Monat := FormatDateTime('
mmmm',strtodatetime(Datum));
CreateDir('
..\Daten\');
CreateDir('
..\Daten\'+Jahr);
CreateDir('
..\Daten\'+Jahr+'
\'+Monat);
sl := TStringList.Create;
try
MMUEZ2000.Lines.Add(Zeile);
sl.AddStrings(MMUEZ2000.Lines);
for i := 0
to sl.Count -1
do
begin
sl[i] := trim(StringReplace(sl[i], #$D, '
', [rfReplaceAll]));
sl[i] := StringReplace(sl[i], #129, '
ü', [rfReplaceAll]);
sl[i] := trim(StringReplace(sl[i], #132, '
ä', [rfReplaceAll]));
sl[i] := StringReplace(sl[i], #142, '
Ä', [rfReplaceAll]);
sl[i] := StringReplace(sl[i], #148, '
ö', [rfReplaceAll]);
sl[i] := StringReplace(sl[i], #153, '
Ö', [rfReplaceAll]);
sl[i] := StringReplace(sl[i], #154, '
Ü', [rfReplaceAll]);
sl[i] := StringReplace(sl[i], #10#13, '
', [rfReplaceAll]);
if sl[i] <> '
'
then
Zeile:='
';
Memo.Lines.Append(SL[I]);
Speichermemo.Lines.Append(SL[I]);
end;
MMUEZ2000.Clear;
sl.Free;
finally
end;
Zeile:='
';
Sicherung := ('
..\Daten\'+Jahr+'
\'+Monat+'
\'+Datum+'
.txt');
Speichermemo.Lines.SaveToFile(Sicherung);
Label1.Caption := Sicherung;
end;
In der Bufferverarbeitung sieht das ganze so aus..
Delphi-Quellcode:
begin
Laenge:=Length(Buffer);
I:=1;
while I < Laenge+1 do
begin
Zeile:=Zeile+Buffer[I];
DataMB256plus:=DataMB256plus+Buffer[I];
case RGZentralentyp.ItemIndex of
0 : DatenverarbeitungMB24;
1 : DatenverarbeitungMB48;
2 : DatenverarbeitungMB100;
3 : DatenverarbeitungMB256;
4 : DatenverarbeitungUEZ2000;
5 : DatenverarbeitungBMC1024;
end;
end;
INC(I);
Buffer:='';
end;
Somit wird jedesmal ein fertige Zeile an die Datenverarbeitung gegeben und direkt ins Memo geschrieben.
Allerdings, Übergebe ich ja auch einen komplettten Datensatz an meine Klasse Parsen,
Hier die komplette Bufferverarbeitung
Delphi-Quellcode:
Laenge:=Length(Buffer);
I:=1;
while I < Laenge+1 do
begin
Zeile:=Zeile+Buffer[I];
DataMB256plus:=DataMB256plus+Buffer[I];
if Buffer[I] = #13 then
if Buffer[I+2] = #13 then
begin
DataMB256plus := StringReplace(DataMB256plus, #154, 'Ü', [rfReplaceAll]);
DataMB256plus := trim(StringReplace(DataMB256plus, #$D, '', [rfReplaceAll]));
DataMB256plus:= StringReplace(DataMB256plus, #129, 'ü', [rfReplaceAll]);
DataMB256plus := trim(StringReplace(DataMB256plus, #132, 'ä', [rfReplaceAll]));
DataMB256plus := StringReplace(DataMB256plus, #142, 'Ä', [rfReplaceAll]);
DataMB256plus := StringReplace(DataMB256plus, #148, 'ö', [rfReplaceAll]);
DataMB256plus := StringReplace(DataMB256plus, #153, 'Ö', [rfReplaceAll]);
DataMB256plus := StringReplace(DataMB256plus, #154, 'Ü', [rfReplaceAll]);
DataMB256plus := StringReplace(DataMB256plus, #10#13, ' ', [rfReplaceAll]);
DatenverarbeitungVSTMB256plus; //Sprung in Procedure
DataMB256plus := '';
end;
IF Buffer[I] =#13 then
begin
case RGZentralentyp.ItemIndex of
0 : DatenverarbeitungMB24;
1 : DatenverarbeitungMB48;
2 : DatenverarbeitungMB100;
3 : DatenverarbeitungMB256;
4 : DatenverarbeitungUEZ2000;
5 : DatenverarbeitungBMC1024;
end;
end;
INC(I);
end;
Buffer:='';
end;
Daher gesehen, Übergebe ich ja in der Var. Übergabe, die mittlerweile Data heißt ja einen kompletten Satz.
Im
DF habe ich mittlerweile auch einen Thread eingestellt, in dem ich das ganze auch noch erläutert habe. Ich habe mittlerweile es soweit geschafft, das die Daten sauber im StringGrid angezeigt werden, jedoch teiilweise 3mal der gleiche Satz, und dann ein der aktuelle, allerdings die zwei dazwischen fehlen.
[EDIT]
So, habe jetzt mal den ganzen Tag Daten lesen lassen, funktioniert super, und wird auch alles eingetragen.
Mein Problem, liegt also somit woanders, und zwar, wenn ich länger keine Verbindung zur Hardware hatte, gibt es in der einen gewissen Puffer.
Dieser wird sofort Übergeben und damit hat meine Programm ein Problem, sobald der Puffer leer ist, und nur noch die Normalen Daten kommen, werden diese sauber eingefüllt. Im Anhang ist ein Bild mit so einem Anfangspuffer.
Habe ich eine Möglichkeit, das irgendwie zu lösen, Ich weiß ja jetzt auch nicht, ob es eventuell Möglich, jenachdem was da gerade an der Hardwáre passiert, wie dann die Daten kommen. Es kann ja sein, nur das kann ich halt an meiner Testanlage nicht prüfen, das es bei großen Systemen, je nach Datenaufkommen, auch schon mal zu diesem Problem kommen kann.
Mein Programm macht ja folgendes, es ließt den Puffer der Anlage, und Übergibt den an die Var. Buffer. Die Variable Buffer wird verarbeitet und anschließend wird erneut der Puffer der Zentrale ausgelesen, Auch dieser kann ja unterumständen schon wieder mehr als einen Datensatz haben.