![]() |
Re: StringGrid mit Daten füllen und farblich Darstellen
Ja natürlich, und konkrete Fragen zu beantworten ist auch kein Problem.
Das ganze ließe sich jedenfalls noch beliebig erweitern, je nachdem was du genau mit den Daten vor hast und wie unterschiedlich die Daten sind. Denn auch die Daten selbst könnte man natürlich in Klassen speichern, damit da auch mehr Variationen möglich sind. ;-) |
Re: StringGrid mit Daten füllen und farblich Darstellen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Sebastian,
so jetzt habe ich ein paar Fragen. Ich habe mir dein Projekt jetzt nochmal angesehen und auch den DEBUGGER durchlaufen lassen. Dann habe ich die Unit in mein Projekt implementiert und die Funktionen in meine LeseFunktion der Schnittstelle mit eingebunden. Dabei kommt es leider noch (aber logischer weiße) zu einem Fehler (Fehler beim Parsen) Die Erklärung liegt darin, das nach dem Begriff Ereignis gesucht wird.
Delphi-Quellcode:
Also den Ablauf hier habe ich (so hoffe ich) verstanden, der Var CurLine (vom Typ String) wird eine gelesen Zeile zugewiesen, mit POS wird ja jetzt gesucht ob Ereignis wirklich an Pos. 1 ist, ist das nicht der Fall, bekomme ich den Fehler "Fehler beim Parsen".
CurLine := ReadLine;
if Pos('Ereignis:', CurLine) <> 1 then raise Exception.Create('Fehler beim Parsen in Zeile:'#13#10 + CurLine + #13#10#13#10'Ereignis: erwartet!'); Delete(CurLine, 1, 10); CurEntry.Index := StrToInt(CurLine); Da meine Daten je nach Zeitpunkt Programmstart anders sind, ist das wahrscheinlich mein Verständnisproblem. Ich hänge unten mal noch eine Datei an, die ich eben Aufgezeichnet habe. Ich denke ich muss nach der Position von "Ereignis: 0000" suchen (0000 ist nur ein Beispiel, der Ausdruck könnte natürlich auch mit 0814 anfangen, da diese Nummer ja von der Einbruchmeldanlage mit gesendet wird und in dieser nur ein kleiner Puffer ist der Überschrieben wird, wenn die Daten nicht ausgedruckt wurden.) und dann diese auf 1 setzten oder so ähnlich. Das Problem, dabei ist nämlich leider auch, das das Wort Ereignis an einem anderen Punkt auch auftauchen kann. (Liegt daran, das ich in der Einbruchmeldeanlage Ereignistexte selber nach belieben einrichten kann). PS: In der Datei im Anhang, sieht man wie so ein Anfang auch schon mal aussehen kann, Die Meldung AKTUELLE EREIGNISSE DRUCKEN, kommt nur wenn der Drucker nicht angeschlossen war und Daten im Puffer der Einbruchmeldeanlage liegen, Und das Ereignis (nur beim ersten Ereignis) mit einem A anfängt, muss auch an der Einbruchmeldeanlage liegen, da das auch nur am Anfang einmal ist, aber auch auf dem Original Papierdrucker so ausgedruckt wird. Daher gesehen, denke ich halt das ich nach dem ersten richtigen Ereigniss suchen muss. Jens |
Re: StringGrid mit Daten füllen und farblich Darstellen
Hallo Sebastian,
lass mal mit den Bemühungen, ich hab´s geknackt und ich glaube auch verstanden, ich werde jetzt erstmal noch ein wenig basteln. Ich habe einfach die if Anweisungen angepasst und sie her es funktioniert soweit. Habe nur leider den Teil der ParserUtilis noch nicht komplett geraft. Aber ich denke das schaff ich auch noch. Melde mich bestimmt nochmal. Danke schon mal Jens |
Re: StringGrid mit Daten füllen und farblich Darstellen
Hallo Sebastian,
habe jetzt auch den Teil von ParserUtils so weit verstanden. Jetzt habe ich mal eine Frage, ich habe ja deine Klasse ParserUtils in mein Programm eingebunden. In der Projektverwaltung ist die jetzt seltsamerweise so eingetragen P Pa Par Pars Parse Parser ... ... ... ParserUtils.pas Woran kann das liegen? MFG Jens |
Re: StringGrid mit Daten füllen und farblich Darstellen
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo nochmal,
So nachdem ich jetzt nochmal lang überlegt und probiert habe, habe ich nochmal ein paar Fragen. Ich lese für das Parsen ja aus einer Textdatei, diese Datei wird ja im laufe eines Tages immer Größer. Kann ich es irgendwie realisiern, das immer nur das gelesen wird, was wirklich von der Schnittstelle kommt und wenn wie bekomme ich das dann Parsen frei. Mit folgendem Code arbeite ich jetzt.
Delphi-Quellcode:
Außerdem habe ich noch folgendes Problem, im Anhang habe ich die mal einen großen Ereignissppeicher eingefügt, und ein paar Bilder wie das Ergebnis aussehen sollte.
procedure TForm1.DatenverarbeitungMB256;
Var Datum :String; Jahr :String; Monat :String; Sicherung :String; SL :TStringList; I :Integer; IA :Integer; IB :Integer; IC :Integer; ID :Integer; N :Integer; Parser: TMySimpleBaseParser; 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:=''; Parser := TMySimpleParserMB256plus.Create; DoParse(Parser, ExtractFilePath(ParamStr(0)) + '..\Daten\'+Jahr+'\'+Monat+'\'+Datum+'.txt'); DisplayResult(Parser); Parser.Free; 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; Man kann an Hand der Datei erkennen, Das teilweise eine Zeile sehr lang ist, und zwar solang, das ich sie nicht in ein Feld von meinem Grid bekomme. Wie kann ich in meinem Grid dem Feld dann sagen Zeilenumbruch ? Gruß Jens |
Re: StringGrid mit Daten füllen und farblich Darstellen
Zitat:
Meinst du das so als Unterordner? Zitat:
Du müsstest nur irgendwie sicherstellen, dass keine halben Einträge drin stehen, aber ansonsten kannst du auch einfach nur einen gerade empfangenen Text als String übergeben. Zitat:
In meinem Quelltext gibt es u.a. die Funktion OemToAnsi, die (hoffe ich ;-)) genau diese Umwandlung in einem Schritt macht. Die könntest du als class function deklarieren und dann einfach mit TMySimpleParser.OemToAnsi() aufrufen. Zitat:
Die bisherigen Einträge werden in Parse ohnehin gelöscht: Zitat:
Zitat:
![]() |
Re: StringGrid mit Daten füllen und farblich Darstellen
Liste der Anhänge anzeigen (Anzahl: 1)
Danke erstmal,
im Anhang mal den Screenshot |
Re: StringGrid mit Daten füllen und farblich Darstellen
Das sieht natürlich sehr komisch aus. Schau mal in den Projektquelltext (Projekt --> Quelltext anzeigen), was steht denn dort? (Oben bei den eingebundenen Units, das müsste ja die selbe Liste sein.)
Vor allem wundert es mich, dass das kompiliert wird. :shock: Irgendetwas stimmt da nicht, aber sowas habe ich noch nicht gesehen. :cyclops: |
Re: StringGrid mit Daten füllen und farblich Darstellen
Das ist eigendlich in Ordnung.
Ich habe diese Dateien jetzt einfach gelöscht, Funktioniert. Projektdatei ist so gewesen:
Delphi-Quellcode:
Werde das mit dem VirtualTreeView gleich mal durchlesen.
Alarm in 'Alarm.pas' {Form1},
ParserUtils in 'ParserUtils.pas' {Stringverarbeitung Datensätze}, Lizenz in 'Lizenz.pas' {TFLizenz}, Messageform in 'Messageform.pas' {FMessagebox}; Also wäre es besser wenn ich mein Grid gegen ein VirtualTreeView austausche. Hast Du da noch Tips |
Re: StringGrid mit Daten füllen und farblich Darstellen
Zitat:
Zitat:
Um die Darstellung so anpassen zu können, wie man es möchte, wäre es am sinnvollsten den Inhalt selbst zu zeichnen. So habe ich es jedenfalls gemacht. Ob es mehrzeilig auch anders geht, bin ich gerade nicht sicher. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:31 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