![]() |
Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
die datei existiert auch? hast du den opendialog vorher aufgerufen und mit ok bestätigt? sonst steht in der eigenschaft Filename nix drin. ansonsten geh ma mit dem debugger durch un guck wo`s knallt. (Haltepunkt setzen mit F5, ausführen mit F9 bist du da ankommst, weiterer Schritt mit F8 )
|
Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
Also IOerror 104 bedeutet "Datei wurde nicht für Leseoperation geöffnet" ...
PS : Wenn die Variable "Zeile" ein String ist, dann sollte mit Zeile[n] eigentlich das n-te Zeichen des Strings extrahiert werde (ohne jeden Knall) - oder sehe ich das falsch? |
Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
Also wenn es bei
Delphi-Quellcode:
ankommt,
if pos(chr(39),Zeile)=0 then begin // << zusätzlich
Überspringt es alles bis
Delphi-Quellcode:
springt hoch und "knallt" bei
CloseFile(Datei);
Delphi-Quellcode:
while not EoF(Datei) do
EDIT: Ich häng das Programm mal an. |
Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
So, der pstruh muss jetzt aus dem Büro nach Hause schwimmen! Ich denke, du suchst an der falschen Stelle. Die Fehlermeldung 104 sagt ja, dass die Datei gar nicht gelesen werden kann. Hier musst du erst einmal ansetzen. Bis später ... und viel Erfolg
|
Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
Wenn du die Daten eh schon in einem TMemo hast, wozu dann nochmals laden ?
So geht auch:
Delphi-Quellcode:
procedure TForm2.btLadenClick(Sender: TObject);
var ZeileIndex, SpalteIndex: integer; Zeile: string; i : integer; liste : TStrings; begin //Pfad zum Stammverzeichnis OpenDialog1.InitialDir:=ExtractFilePath(ParamStr(0)); if not opendialog1.Execute then exit; Memo1.Lines.LoadFromFile(OpenDialog1.FileName); liste := Memo1.lines; // Daten ins Stringgrid übertragen ZeileIndex:=1; for i:=0 to liste.count-1 do begin zeile := liste[i]; if (zeile<>'') and (zeile[1]='''') then continue; // Kommentarzeile überspringen //Tabelle automatisch um 1 Zeile erhöhen sgMess.RowCount:=sgMess.RowCount+1; 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); end; end; |
Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
Vielen Dank! Funktioniert einwandfrei :)
![]() ![]() Nun zum nächsten Problem...wie bekommen ich aus der Spalte mit den Werten, das Maximum und Minimum heraus? |
Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
Hallo atgis,
deine Frage ist jetzt etwas verwunderlich, da die Lösung doch sehr einfach: In einer Schleife durchläufst du die GridSpalte mit den Werten. Vorher deklarierst du 2 Variablen MinVal:=maxInt und MaxVal:=0, wenn der Zellwert<MinVal ist, dann wird MinVal durch den Zellwert ersetzt, wenn Zellwert>MaxVal dann analog. Bist du in der letzten GridRow angekommen, stehen in beiden Variablen die gewünschten Werte. (Habe das jetzt bewusst nicht codiert), ich denke, es ist am lehrreichsten, wenn du das mit diesen Anweisungen selbst machst. Bin für weitere Hilfestellungen aber (naürlich) ansprechbar :hi: |
Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
Danke!
Delphi-Quellcode:
So habe ich aber nur die Ergebnisse der ersten Spalte. Wie komme ich in die 2. Spalte mit den Werten?
var MinVal: integer;
MaxVal: integer; i: integer; begin MinVal:=maxInt; MaxVal:=0; for i:=1 to sgMess.RowCount-1 do if i < MinVal then MinVal:=i else if i > MaxVal then MaxVal:=i; edMin.Text:=IntToStr(MinVal); edMax.Text:=IntToStr(MaxVal); |
Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
Hallo atgis,
joooo, das ist schon FAST die Lösung. Denkfehler dabei ist, dass du nur den Schleifenzähler untersuchst - du musst natürlich auf den Zellinhalt deiner Wertespalte prüfen (Werte stehen in Spalte 1, oder?)
Delphi-Quellcode:
Für den MaxWert analoges Vorgehen.
if StrToInt(sgMess.Cells[1,i])<MinVal then MinVal:=StrToInt(sgMess.Cells[1,i])
Gruß aus Hamburg |
Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
Delphi-Quellcode:
Aber der Compiler spuckt mich schon bei
var MinVal: integer;
MaxVal: integer; i: integer; begin MinVal:=maxInt; MaxVal:=0; for i:=1 to sgMess.RowCount-1 do if StrToInt(sgMess.Cells[1,i]) < MinVal then MinVal:=StrToInt(sgMess.Cells[1,i]) else if StrToInt(sgMess.Cells[1,i]) > MaxVal then MaxVal:=StrToInt(sgMess.Cells[1,i]); edMin.Text:=IntToStr(MinVal); edMax.Text:=IntToStr(MaxVal);
Delphi-Quellcode:
an, dass der Wert 0019 kein gültiger Integerwert sei...Warum nicht? Ich wandel doch den String um? Es liegt aber nicht an 0019 - ich hab zum testen nur 19 hineingeschrieben!
StrToInt(sgMess.Cells[1,i])
![]() ![]() bei der Fehlermeldung "19 fehlt das andere "-Zeichen?! :shock: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:51 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