![]() |
Fehlermeldung EInOut Error
Hallo!
Wer kann mir dabei helfen, den folgenden Fehler in der folgenden Ausgabeprozedur zu finden, so daß die Ausgabe funktioniert. Ich erhielt beim compilieren folgende Meldung: "...Exception der Klasse EInOut Error...Meldung:'E/A-Fehler6'...
Code:
Danke für die Hilfe
procedure TForm3.Button5Click(Sender: TObject);
var jk, jj, ss, kk : integer; min, Sum, Sum1, Dif : real; begin with StringGrid1 do begin StringGrid1.FixedCols:=0; StringGrid1.FixedRows:=1; StringGrid1.ColCount:=5; StringGrid1.RowCount:=367; StringGrid1.Cells[0,0]:='Tag'; StringGrid1.Cells[1,0]:='Datum'; StringGrid1.Cells[2,0]:='Abschattungsbeginn'; StringGrid1.Cells[3,0]:='Abschattungsende'; StringGrid1.Cells[4,0]:='Belastungszeit'; kk:=0; for jk:=1 to 366 do if gSchatA[jk]>0 then begin kk:=kk+1; Tag:=jk; Deklination(Tag); AU(Tag); tAnfang:=0.1*SchatA[jk]+0.9*gSchatA[jk]; Besser(tAnfang); Dif:= abs(gSchatA[jk]-gZeit); if (Dif < 0.00025) or (gZeit=0) then gSchatA[jk]:=gZeit else repeat tAnfang:=gSchatA[jk]; Besser(tAnfang); Dif:=abs(gSchatA[jk]-gZeit); gSchatA[jk]:=gZeit; until Dif < 0.00025; tAnfang:=0.1*SchatE[jk]+0.9*gSchatE[jk]; Besser(tAnfang); Dif:= abs(gSchatE[jk]-gZeit); if (Dif < 0.00025) or (gZeit=0) then gSchatE[jk]:=gZeit else repeat tAnfang:=gSchatE[jk]; Besser(tAnfang); Dif:=abs(gSchatE[jk]-gZeit); gSchatE[jk]:=gZeit; until Dif < 0.00025; if gSchatA[jk]=0 then if gSchatE[jk] >0 then gSchatA[jk]:=gSchatE[jk]; if gSchatE[jk]=0 then if gSchatA[jk] >0 then gSchatE[jk]:=gSchatA[jk]; Belastung[jk]:=(SchatE[jk]-SchatA[jk])*60; gBela[jk]:=(gSchatE[jk]-gSchatA[jk])*60; // Zeitumwandlung in Stunden und Minuten ss:=trunc(gSchatA[jk]); min:=round((gSchatA[jk]-SS)*60); if min=60 then begin ss:=ss+1; min:=0; end; gSchatA[jk]:=ss+min/100; ss:=trunc(gSchatE[jk]); min:=round((gSchatE[jk]-ss)*60); if min=60 then begin ss:=ss+1; min:=0; end; gSchatE[jk]:=ss+min/100; Tag:=jk; Datum(Tag); jj:=Trunc(kk/20); if jj= kk/20 then Readln; StringGrid1.Cells[0,jk]:=InttoStr(jk); StringGrid1.Cells[1,jk]:=InttoStr(Dat)+' '+Monat; StringGrid1.Cells[2,jk]:=FormatFloat('0.00', gSchatA[jk]); StringGrid1.Cells[3,jk]:=FormatFloat('0.00', gSchatE[jk]); StringGrid1.Cells[4,jk]:=FormatFloat('0.0', gBela[jk]); StringGrid1.RowCount:=StringGrid1.RowCount+1; end;end; Sum:=0; Sum1:=0; for jk:=1 to 366 do begin Sum:=Sum+Belastung[jk]; Sum1:=Sum1+gBela[jk]; end; Jahrbela:=Sum/60; Jahrbe:=Sum1/60; StringGrid1.RowCount:=StringGrid1.RowCount+1; StringGrid1.Cells[0,StringGrid1.RowCount]:='Jahresbelastung:'; StringGrid1.Cells[1,StringGrid1.RowCount]:=FormatFloat('0.0', Jahrbe); StringGrid1.Cells[2,StringGrid1.RowCount]:=FormatFloat('0.0', Jahrbela); readln; // Hier ist die Unterbrechnug des Programmes end; Gruß TF |
Re: Fehlermeldung EInOut Error
Könntest du den Fehler etwas eingrenzen? Ich habe keine Lust das Code-Monster erst zu zerlegen.
|
Re: Fehlermeldung EInOut Error
HI!
Hast schon mal probiert, das READLN einfach durch ein ShowMessage(''); zu ersetzen ??? Sollte dann gehen.... hoffentlich :D |
Re: Fehlermeldung EInOut Error
Hy,
der Pfeil (Fehlermeldung) zeigt auf die vorletzte Zeile. Gruß Thorsten |
Re: Fehlermeldung EInOut Error
Was hat das ReadLn hier zu suchen? Damit liest du von der Standardeingabe. Was hat das in einem GUI-Programm zu suchen?
|
Re: Fehlermeldung EInOut Error
Moin Thorsten,
lass mal das ReadLn weg. Was soll das überhaupt bewirken? Da Du ein fensterorientiertes Programm hast, hast Du standardmässig auch keine Konsole, und somit schlägt ein einfacher ReadLn auch fehl. Error 6 ist ERROR_INVALID_HANDLE, da Dein ReadLn auf ein nicht vorhandenes StdIn Handle zugreifen will. Oder Du lässt Deinem Programm eine Konsole zuweisen.
Delphi-Quellcode:
AllocConsole;
ReadLn; FreeConsole; |
Re: Fehlermeldung EInOut Error
Hallo noch einmal,
das 'readln' stammt aus der Übersetzung aus dem Pascal Quellcode. Ich wusste bisher nicht, mit welchen Delphi Befehl readln ersetzt werden kann. Vielleicht ist dies auch nicht notwendig, da ja ein stringgrid verwendet wird. Wenn er doch ersetzt werden muß, welchen Befehl benötige ich? Gruß Thorsten |
Re: Fehlermeldung EInOut Error
Gar keinen. readln liest eine Eingabe von der Konsole. Wo bekommst du denn deine Eingaben her?
Aber ich habe den Verdacht, dass readln stand da aus einem anderen Grund, nämlich dass sich das Programm nicht gleich beendet und die Konsole geschlossen wird bevor man das Ergebnis gelesen hat. Das readln am Ende erfordert erst noch ein Return. Was auch für meine Theorie spricht, ist die Tatsache, dass die Eingabe nirgens gespeichert wird. |
Re: Fehlermeldung EInOut Error
Hy,
vielleicht gibt der ursprüngliche Pascal Quellcode Aufschluss:
Code:
Gruß
procedure Ausgabe;
var jk,jj,ss,kk :integer; min, Sum, Sum1, Dif :real; begin ClrScr; writeln; writeln; Write(' '); writeln(' Schattenwurfzeiten'); writeln; Write(' '); writeln(' Tag Datum Abschattungsbeginn Abschattungsende Belastungszeit'); Write(' '); Writeln('____________________________________________________________________'); kk:=0; for jk:=1 to 366 do begin if gSchatA[jk]>0 then begin kk:=kk+1; Tag:=jk; Deklination(Tag); AU(Tag); tAnfang:=0.1*SchatA[jk]+0.9*gSchatA[jk]; Besser(tAnfang); Dif:= abs(gSchatA[jk]-gZeit); if (Dif < 0.00025) or (gZeit=0) then gSchatA[jk]:=gZeit else begin repeat tAnfang:=gSchatA[jk]; Besser(tAnfang); Dif:=abs(gSchatA[jk]-gZeit); gSchatA[jk]:=gZeit; until Dif < 0.00025; end; tAnfang:=0.1*SchatE[jk]+0.9*gSchatE[jk]; Besser(tAnfang); Dif:= abs(gSchatE[jk]-gZeit); if (Dif < 0.00025) or (gZeit=0) then gSchatE[jk]:=gZeit else begin repeat tAnfang:=gSchatE[jk]; Besser(tAnfang); Dif:=abs(gSchatE[jk]-gZeit); gSchatE[jk]:=gZeit; until Dif < 0.00025; end; if gSchatA[jk]=0 then begin if gSchatE[jk] >0 then gSchatA[jk]:=gSchatE[jk]; end; if gSchatE[jk]=0 then begin if gSchatA[jk] >0 then gSchatE[jk]:=gSchatA[jk]; end; Belastung[jk]:=(SchatE[jk]-SchatA[jk])*60; gBela[jk]:=(gSchatE[jk]-gSchatA[jk])*60; {Zeitumwandlung in Stunden und Minuten} ss:=trunc(gSchatA[jk]); min:=round((gSchatA[jk]-SS)*60); if min=60 then begin ss:=ss+1; min:=0; end; gSchatA[jk]:=ss+min/100; ss:=trunc(gSchatE[jk]); min:=round((gSchatE[jk]-ss)*60); if min=60 then begin ss:=ss+1; min:=0; end; gSchatE[jk]:=ss+min/100; Tag:=jk; Datum(Tag); jj:=Trunc(kk/20); if jj= kk/20 then readln; Write(' '); writeln(jk:4,Dat:6,Monat:5, gSchatA[jk]:10:2,' Uhr', gSchatE[jk]:14:2,' Uhr', gBela[jk]:13:1,' min'); end; end; Sum:=0; Sum1:=0; for jk:=1 to 366 do begin Sum:=Sum+Belastung[jk]; Sum1:=Sum1+gBela[jk]; end; Jahrbela:=Sum/60; Jahrbe:=Sum1/60; Writeln;Write(' '); Writeln('Jahresbelastung:', Jahrbe:8:1,' Stunden', Jahrbela:14:1 ); readln; end; Thorsten |
Re: Fehlermeldung EInOut Error
Sieht so aus, als ob ich Recht hätte.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:13 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