Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi StringGrid - Minimum, Maximum, Durchschnitt bestimmen (https://www.delphipraxis.net/99839-stringgrid-minimum-maximum-durchschnitt-bestimmen.html)

kaiser1401 18. Sep 2007 16:34

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 )

pstruh 18. Sep 2007 16:38

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?

atgis 18. Sep 2007 16:44

Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
 
Also wenn es bei
Delphi-Quellcode:
if pos(chr(39),Zeile)=0 then begin  // << zusätzlich
ankommt,

Überspringt es alles bis
Delphi-Quellcode:
CloseFile(Datei);
springt hoch und "knallt" bei

Delphi-Quellcode:
while not EoF(Datei) do

EDIT: Ich häng das Programm mal an.

pstruh 18. Sep 2007 16:49

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

shmia 18. Sep 2007 17:23

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;

atgis 18. Sep 2007 18:16

Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
 
Vielen Dank! Funktioniert einwandfrei :)
http://img3.imagebanana.com/img/2g4h.../NeuBitmap.JPG

Nun zum nächsten Problem...wie bekommen ich aus der Spalte mit den Werten, das Maximum und Minimum heraus?

pstruh 18. Sep 2007 20:14

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:

atgis 19. Sep 2007 12:05

Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
 
Danke!
Delphi-Quellcode:
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);
So habe ich aber nur die Ergebnisse der ersten Spalte. Wie komme ich in die 2. Spalte mit den Werten?

pstruh 19. Sep 2007 12:45

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:
if StrToInt(sgMess.Cells[1,i])<MinVal then MinVal:=StrToInt(sgMess.Cells[1,i])
Für den MaxWert analoges Vorgehen.
Gruß aus Hamburg

atgis 19. Sep 2007 13:39

Re: StringGrid - Minimum, Maximum, Durchschnitt bestimmen
 
Delphi-Quellcode:
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);
Aber der Compiler spuckt mich schon bei
Delphi-Quellcode:
StrToInt(sgMess.Cells[1,i])
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!

http://img213.imageshack.us/img213/1...5745tq2.th.jpg
bei der Fehlermeldung "19 fehlt das andere "-Zeichen?! :shock:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:55 Uhr.
Seite 2 von 5     12 34     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz