![]() |
StringGrid - Minimum, Maximum, Durchschnitt bestimmen
Hallo,
Ich habe folgendes Problem. Ich hab hier ein Programm, welches eine TXT Datei laden soll. Danach soll es aus den unterschiedlichen nummerischen Werten das Minimum, Maximum sowie das Arithmetische Mittel errechnen... Die TXT Datei besteht aus "zwei" Teilen. Ein Kommentar Bereich und eben die Werte. Also meine Überlegung wäre nun, den Kommentarbereich in ein Memo-Feld zuladen. Funktioniert auch... Die einzelnen Werte der TXT sind wohl am besten in einem StringGrid aufgehoben. Nun möchte ich aber die TXT erst aber einer gewissen Zeile (nämlich nach dem Kommentar-Bereich) laden...Wie stell ich das an? Hier erstmal die TXT:
Delphi-Quellcode:
So lade ich die TXT in das StringGrid:
'**************************************************************************
'LogView File; ScopeView Version:1.03 'Copyright 1994, AGA Associates. 'File Created: 10:20:24pm Nov 14, 03 '************************************************************************** 'Timebase: 00:00:01 'Hi Limit: Off 'Lo Limit: Off 'Filter Mode: Capture All Data; Filter Off '************************************************************************** 0020 C TE 09:20:01pm 0020 C TE 09:20:02pm 0020 C TE 09:20:03pm 0020 C TE 09:20:04pm 0021 C TE 09:20:05pm 0022 C TE 09:20:06pm 0023 C TE 09:20:07pm 0023 C TE 09:20:08pm 0024 C TE 09:20:09pm 0023 C TE 09:20:10pm 0023 C TE 09:20:11pm 0022 C TE 09:20:12pm 0020 C TE 09:20:13pm 0020 C TE 09:20:14pm 0019 C TE 09:20:15pm ....usw....
Delphi-Quellcode:
Aber wiegesagt, soll der Inhalt erst nach dem Kommentar-Bereich geladen werden (ab der 10 Teile).
procedure TForm2.btLadenClick(Sender: TObject);
var Datei: Textfile; ZeileIndex, SpalteIndex: integer; Zeile: string; //Laden der TXT in das StringGrid AssignFile(Datei, OpenDialog1.FileName); reset(Datei); ZeileIndex:=1; while not EoF(Datei) do begin readln(Datei, Zeile); SpalteIndex:=0; while pos(chr(9), Zeile) <> 0 do begin sgMess.Cells[SpalteIndex, ZeileIndex]:=copy(Zeile, 1, pos(chr(9), Zeile)-1); delete(Zeile, 1, pos(chr(9), Zeile)); inc(SpalteIndex); end; sgMess.Cells[SpalteIndex, ZeileIndex]:=Zeile; inc(ZeileIndex); //Tabelle automatisch um 1 Zeile erhöhen sgMess.RowCount:=sgMess.RowCount+1; end; CloseFile(Datei); //letze Zeile ist zuviel -> überstehende Zeile löschen sgMess.RowCount:=sgMess.RowCount-1; end; Kann mir jemand helfen? EDIT: Das erste Problem ist gelöst! Der der Inhalt wird erst nach dem Kommentar-Bereich, in das StringGrid geladen... Fehlt noch die Maximum, Minimum und Mittelwert bestimmung... |
Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
mh, da deine Kommentare mit ' zu beginnen scheinen könttest du bei jeder Zeile zunächst vergleichen ob das 1. Zeichen ein solches ist und diese ZEile dann ignorieren bzw überspringen ...
Edit: Also in dem Memo, nachdem du die Datei eingelesen hast:
Delphi-Quellcode:
while (memo1.lines.count>0) and (copy(memo1.lines[0],1,1 = '''') do
begin memo1.lines.delete(0); // das delete ist geraten, grad die syntax nicht im kopf end; |
Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
Zitat:
Delphi-Quellcode:
Sowas funktioniert aber nicht...if pos(1, 1) = chr(96) then ShowMessage('Ist eins') else ShowMessage('Ist keins'); |
Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
Hallo, wenn noch nicht gelöst, dann vielleicht so ...
Delphi-Quellcode:
while not EoF(Datei) do
begin readln(Datei, Zeile); if Zeile[1]<>'''' then begin // << zusätzlich SpalteIndex:=0; while pos(chr(9), Zeile) <> 0 do begin sgMess.Cells[SpalteIndex, ZeileIndex]:=copy(Zeile, 1, pos(chr(9), Zeile)-1); delete(Zeile, 1, pos(chr(9), Zeile)); inc(SpalteIndex); end; sgMess.Cells[SpalteIndex, ZeileIndex]:=Zeile; inc(ZeileIndex); //Tabelle automatisch um 1 Zeile erhöhen sgMess.RowCount:=sgMess.RowCount+1; end; // << zusätzlich end; |
Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
Hm, wieso pos(1,1)=Chr(96) ???? Wenn schon, dann pos(chr(96),Zeile)=1 then ...
aber da ist kein #96, sondern ein #39 in deiner Datei |
Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
Zitat:
Delphi-Quellcode:
Funktioniert leider nicht -> Exception!
if Zeile[1]<>'''' then begin // << zusätzlich
end; EDIT: Ich muss irgendwie jede Zeile überprüfen, ob das erste Zeichen ein #39 ist! Wenn ja soll die Zeile nicht ausgegeben werden. Wenn nicht wird einfach weitergemacht und nur Zeilen ohne #39 werden ausgegeben... Mh aber wie? |
Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
na, dann mit pos(#39,Zeile)=0 ...
|
Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
|
Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
"zeile" ist kein array, sondern nur ein string, oder?
also knallt zeile[1] auch. |
Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
Jawohl, Zeile ist String...beides bringt die Exception...
Mh, was kann man da machen?! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:27 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 by Thomas Breitkreuz