![]() |
Logdatei in StringGrid laden
Hi Männers
Wie es schon in der Überschrift steht versuche ich eine Logdatei in ein StringGrid zu laden, die Spalten sind fest auf 20 und die Zeilen können variiren. Da habe ich schon mein 1 Problem, wie Realisiere ich das wenn ich die Datei lade das, das StringGrid Automatisch sich anpasst. Die andere Frage ist wie bekomme ich die Überschriften in der Logdatei in die Fixed.Rows auch zur Laufzeit. Und naturlich die wichtigste Frage wie bekomme ich überhaupt die Datei in das StringGrid und auch noch richtig Formatiert Die Datei hänge ich mal an. Danke euch schonmal Gruß sascha |
Re: Logdatei in StringGrid laden
Hallo Sascha,
Zitat:
Freundliche Grüße |
Re: Logdatei in StringGrid laden
Wäre da nicht ein Memo eher geeignet
|
Re: Logdatei in StringGrid laden
Liste der Anhänge anzeigen (Anzahl: 1)
ah deswegen gings nicht .log ist verboten(einfach umbennenen in .log
|
Re: Logdatei in StringGrid laden
*angestrengt gugg und such* ja wo ist sie denn, die angehängte Datei :gruebel:
zur ersten Frage: Anzahl der Zeilen der darzstellenden Logdatei ermitteln und darauf hin die Zeilen des StringGrid einstellen:
Delphi-Quellcode:
zweite Frage:
StringGrid1.RowCount := AnzahlFesteZeilen + AnzahlDerLogdateiZeilen;
Auch die (per Desingner oder per Code ) eingestellten FixedRows können direkt per Index angesprochen werden:
Delphi-Quellcode:
dritte Frage, 1.Teil:
StringGrid1.Rows[0] := ... // erste feste Zeile
Logdatei zeilenweise auslesen und je nach Aufbau der Zeile diese entsprechend splitten gesplitte ZeilenFragmente in die entsprechenden Zellen schreiben
Delphi-Quellcode:
dritte Frage, 2.Teil:
...
while not Logdatei.Eof do begin Zeile auslesen; Zeile splitten; StringGrid1.Cells[Spalte, Zeile] := TeilInhalt der gespliiten Zeile Zeile := Zeile +1; //Zeilennummer erhöhen ... end; präzisiere [quote] richtig Formatiert [/qoute] Gruss Rainer [EDIT] kaum das man schreibt und noch keine Antworten da sind, schon ist der rote kasten da*grr*[/EDIT] |
Re: Logdatei in StringGrid laden
Gibt es auch Zeilen, in den alle Felder Werte haben?
|
Re: Logdatei in StringGrid laden
Du könntest auch die gesamte Komponente abspeichern:
Speichern:
Delphi-Quellcode:
Laden:
FileStream:= TFileStream.Create(extractfilepath(Application.ExeName)+'data.txt', fmCreate);
try FileStream.WriteComponent(Stringgrid1); finally FileStream.Free; end;
Delphi-Quellcode:
MFG Lars Wiltfang
FileStream:= TFileStream.Create(extractfilepath(Application.ExeName)+'data.txt', fmopenread);
try FileStream.WriteComponent(Stringgrid1); finally FileStream.Free; end; |
Re: Logdatei in StringGrid laden
Zitat:
Das mit dem FileStrem habe ich schon versucht geht leider nicht. Das mit dem Formatieren meine ich das auch alles richtig untereinander steht und nicht verschoben ist |
Re: Logdatei in StringGrid laden
Deshalb musst du die Zeilen auch aufspalten
|
Re: Logdatei in StringGrid laden
Zitat:
Sorry das ich mich mal wieder so blöd anstelle aber hab das noch nie gemacht |
Re: Logdatei in StringGrid laden
Hallo Sascha,
dein Logfile ist ein Tab Delimited Textfile:
Delphi-Quellcode:
Getippt und nicht getestet.
procedure ShowLog(const fn: TFileName; sg: TStringGrid; delimiter: Char = #9);
var log: TextFile; line: string; begin AssignFile(log, fn); Reset(log); with sg do begin RowCount := 1; while not Eof(log) do begin ReadLn(log, line); Rows[Pred(RowCount)].Text := StringReplace(line, delimiter, sLineBreak, [rfReplaceAll]); RowCount := RowCount + 1; end; FixedRows := 1; end; CloseFile(log); end; Freundliche Grüße |
Re: Logdatei in StringGrid laden
Zitat:
ich komme mit diesen ganzen Antorten irgenwie nicht weiter. Z.B mit dem anpassen der Zeilen dazu muss doch erst die Datei Formatiert weden um die richtige Zeilen anzahl heraus zu bekommen oder?? |
Re: Logdatei in StringGrid laden
Ok Sorry nicht schlagen es Funzt doch aber kann mir das einer mit dieser
Tab Delimited Textfile: noch erklären nur abtippen und nicht verstehn ist blöd |
Re: Logdatei in StringGrid laden
Zitat:
Zitat:
Du musst Zeile für Zeile durchgehen, diese abhand des Trenner auf trennen (explode, StringListe) und dann darstellen |
Re: Logdatei in StringGrid laden
Sascha,
Zitat:
Delphi-Quellcode:
Der Text einer Row[] enthält die Spaltenwerte als einzelne Zeilen - und nimmt sie auch so auf. Aber das hast du inzwischen bestimmt schon selbst erkannt.
// ...
Rows[Pred(RowCount)].Text := StringReplace(line, delimiter, sLineBreak, [rfReplaceAll]); // ... Freundliche Grüße |
Re: Logdatei in StringGrid laden
So einigermaßen hab ich verstanden.
! Frage noch kann man die Cellenbreite auch Automatisch anpassen lassen also so lang wie die längstebreite in der Spalte ich denke ich habe schonmal einen Code hier gesehen aber ich find den nicht mehr |
Re: Logdatei in StringGrid laden
Mal für eine Spalte:
- Breite auf 0 setzen - beim zeilenweisen Einfügen Canvas.TextWidth mit aktueller Breite vergleichen - wenn größer, Breite neu setzen Das Ganze kannst Du auch in einem Array für alle Spalten machen, ist ja immer dasselbe Prinzip. |
Re: Logdatei in StringGrid laden
Hallo,
Zitat:
Freundliche Grüße |
Re: Logdatei in StringGrid laden
Mit Breite war eigentlich eine Variable zur Ermittlung der aktuellen maximalen Breite gemeint, aber das ging aus meiner Beschreibung nicht eindeutig hervor, muss ich zu meiner Schande zugeben.
|
Re: Logdatei in StringGrid laden
meint ihr sowas
Delphi-Quellcode:
und das alles in eine schleife gelegt
StringGrid1.DefaultCol.Widht:= StringGrid1.Canvas.TextWidth(zellen Position);
|
Re: Logdatei in StringGrid laden
Wie marabu bereits sagte: leg Dir besser eine Variable an, belege sie mit 0 vor und vergleiche innerhalb der Schleife (-> Ermittlung des Maximums). Zum Schluss setzt Du dann die Breite entsprechend des Werts dieser Variablen.
|
Re: Logdatei in StringGrid laden
Ja das meine ich das maximum des Textes oder (sorry steh auf dem schlauch)
|
Re: Logdatei in StringGrid laden
Im Prinzip so (aus dem Kopf dahergetippt):
Delphi-Quellcode:
function MaxBreite(const cv: TCanvas; const sl: TStrings): integer;
var i, Current: integer; begin Result := 0; for i := 0 to Pred(sl.Count) do begin Current := cv.TextWidth(sl[i]); if Current > Result then Result := Current; end; end; |
Re: Logdatei in StringGrid laden
Sorry wenn ich blöd frage aber Result ist doch keine Variable sondern gibt den Rückgabe wert an oder hab ich da was falsch verstanden??
|
Re: Logdatei in StringGrid laden
Zitat:
Result ist eine automatisch generierte Variable bei Funktionen die den Rückgabewert beinhaltet. ;-) |
Re: Logdatei in StringGrid laden
Du kannst Result auch als Variable betrachten. Außerdem war das ja nur ein Beispiel.
|
Re: Logdatei in StringGrid laden
Deswegen frag ich hab langenung abgetippt ohne es zu vertehen langsam wird es auchmal Zeit um es auch zu verstehen.
Und an fertigen beispielen kann ich besser lernen und verstehen. |
Re: Logdatei in StringGrid laden
Für das Verständnis wäre es besser selber zu machen.
|
Re: Logdatei in StringGrid laden
Das denke ich auch und ich versuchs ja schon seit gestern aber irgendwie will das alles net so wie ich mir das vorstelle,das Prinzip wie Ihr das meint habe ich auch bereits verstanden bei mir scheitert es gerade an der Umsetzung :oops:
|
Re: Logdatei in StringGrid laden
Fang mit kleinen Aufgabestellungen an.
|
Re: Logdatei in StringGrid laden
Das ist doch eigentlich ne kleine Aufgabe beziehungsweise eine Standart Aufgabe für ein StringGrid und wenn ich mir mal meine 1 Posts angucke bin ich der Meinung das ich mit meinem blöden fragen :-D schon weit gekommen bin.
Und das meiste habe ich ja auch immer verstanden dauert bei mir halt immer sorry :lol: |
Re: Logdatei in StringGrid laden
Hab es zwar immer noch nicht mit dem Code von euch verstanden aber hab da was gefunden nur falls mal jemand das noch braucht.
![]() Danke Trotzdem für die Mühe |
Re: Logdatei in StringGrid laden
Aber das ist ja (natürlich) prinzipiell die gleiche Lösung wie in #23 von DeddyH - was hast du denn daran nicht verstanden?
|
Re: Logdatei in StringGrid laden
Z.b welchen TStrings soll ich der funktion übergeben
Delphi-Quellcode:
function MaxBreite(const cv: TCanvas; const sl: TStrings): integer;
|
Re: Logdatei in StringGrid laden
Die Liste aller Grid-Einträge der anzupassenden Spalte, also z.B. Grid.Cols[1] für die zweite Spalte (i.d.R. die erste Spalte neben der fixen Spalte)
// edit: Cols nicht Rows! |
Re: Logdatei in StringGrid laden
Wie gesagt, das war nur ein Beispiel, ich würde diese Funktion nicht nutzen, sondern nur das Prinzip beim Befüllen der einzelnen Spalten anwenden. Wenn es aber unbedingt diese Funktion sein soll, kannst Du als Canvas den des StringGrids und als sl StringGrid.Cols[Index] angeben.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:45 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