Einzelnen Beitrag anzeigen

Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#43

Re: StringGrid mit Daten füllen und farblich Darstellen

  Alt 21. Feb 2009, 13:42
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.
Miniaturansicht angehängter Grafiken
puffer_150.gif  
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat