AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fehlermeldung EInOut Error

Ein Thema von thorstenf01 · begonnen am 21. Jul 2003 · letzter Beitrag vom 22. Jul 2003
Antwort Antwort
Seite 1 von 2  1 2      
thorstenf01

Registriert seit: 10. Jul 2003
Ort: Kiel
34 Beiträge
 
#1

Fehlermeldung EInOut Error

  Alt 21. Jul 2003, 13:21
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:
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;
Danke für die Hilfe
Gruß
TF
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Fehlermeldung EInOut Error

  Alt 21. Jul 2003, 13:45
Könntest du den Fehler etwas eingrenzen? Ich habe keine Lust das Code-Monster erst zu zerlegen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
HellAngel666

Registriert seit: 21. Jul 2003
6 Beiträge
 
#3

Re: Fehlermeldung EInOut Error

  Alt 21. Jul 2003, 14:17
HI!

Hast schon mal probiert, das READLN einfach durch
ein ShowMessage(''); zu ersetzen ???

Sollte dann gehen.... hoffentlich
  Mit Zitat antworten Zitat
thorstenf01

Registriert seit: 10. Jul 2003
Ort: Kiel
34 Beiträge
 
#4

Re: Fehlermeldung EInOut Error

  Alt 21. Jul 2003, 14:18
Hy,
der Pfeil (Fehlermeldung) zeigt auf die vorletzte Zeile.
Gruß
Thorsten
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Fehlermeldung EInOut Error

  Alt 21. Jul 2003, 14:21
Was hat das ReadLn hier zu suchen? Damit liest du von der Standardeingabe. Was hat das in einem GUI-Programm zu suchen?
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Fehlermeldung EInOut Error

  Alt 21. Jul 2003, 14:26
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;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
thorstenf01

Registriert seit: 10. Jul 2003
Ort: Kiel
34 Beiträge
 
#7

Re: Fehlermeldung EInOut Error

  Alt 21. Jul 2003, 15:03
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Fehlermeldung EInOut Error

  Alt 21. Jul 2003, 15:09
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
thorstenf01

Registriert seit: 10. Jul 2003
Ort: Kiel
34 Beiträge
 
#9

Re: Fehlermeldung EInOut Error

  Alt 21. Jul 2003, 15:20
Hy,
vielleicht gibt der ursprüngliche Pascal Quellcode Aufschluss:
Code:
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;
Gruß
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Fehlermeldung EInOut Error

  Alt 21. Jul 2003, 15:25
Sieht so aus, als ob ich Recht hätte.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 Uhr.
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