Runtime Error 106

Programovacie jazyky, rady, poradňa...
romike469
Amateur
Amateur
Príspevky: 14
Registrovaný: 10 jan 2014, 20:43

Runtime Error 106

Príspevok od používateľa romike469 »

Zdar. Snažím sa spraviť program, ktorý číta .txt file (meno, výška, váha) vypočíta bmi, vypíše do mema a tí čo majú medzi 18,5-25 bmi vypíše do nového .txt súboru
Ked však kliknem na button vypíše mi runtime error v riadku readln(vst......);
nevie mi niekto s tým poradiť?

Kód: Vybrať všetko

procedure TForm1.Button1Click(Sender: TObject);
begin
    assignFile(vst,'ziaci.txt');
  assignFile(vyst,'zdravi.txt');
  reset(vst);
  rewrite(vyst);
 while not eof(vst) do begin
   readln(vst,meno,vyska,vaha);
   bmi:=vaha/(vyska*vyska);
   Memo1.Lines.Add(meno+' '+FloatTOStr(bmi));
  end;
  writeln(vyst,meno,vyska,vaha);
  closefile(vst);
  closefile(vyst);
end;
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Runtime Error 106

Príspevok od používateľa audiotrack »

Runtime Error 106 znamená "invalid numeric data" takže máš zlý vstup. Ako vyzerá tvoj skúbor ziaci.txt? A ako máš zadeklarované premenné vyska a vaha?
romike469
Amateur
Amateur
Príspevky: 14
Registrovaný: 10 jan 2014, 20:43

Re: Runtime Error 106

Príspevok od používateľa romike469 »

Peter 1,83 73
Michal 1,65 94
Jano 1,86 83
meno-String
vyska-Real
vaha-Integer
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Runtime Error 106

Príspevok od používateľa audiotrack »

desatinná časť sa v delphi oddeluje bodkou, nie čiarkou
romike469
Amateur
Amateur
Príspevky: 14
Registrovaný: 10 jan 2014, 20:43

Re: Runtime Error 106

Príspevok od používateľa romike469 »

Skúšal som to. Stále vypisuje error.
Je to v lazaruse, ale tam asi neni veľký rozdiel.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Runtime Error 106

Príspevok od používateľa audiotrack »

skús odignorovať tú chybu a vypísať si čo ti do tej premennej hodilo:

Kód: Vybrať všetko

.
.
.
{$I-} 
readln(vst,meno,vyska,vaha);
{$I+}
showMessage(meno + floatToStr(vyska) + intToStr(vaha) );
.
.
.

prípadne sa na to pozri cez debugger
xadman
Medium Star
Medium Star
Príspevky: 305
Registrovaný: 09 mar 2011, 17:02

Re: Runtime Error 106

Príspevok od používateľa xadman »

netreba pred beginom zadeklarovať tie premenné?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Runtime Error 106

Príspevok od používateľa audiotrack »

netreba, je to iba metoda triedy Tform1, takže vidí všetky jej premenné
romike469
Amateur
Amateur
Príspevky: 14
Registrovaný: 10 jan 2014, 20:43

Re: Runtime Error 106

Príspevok od používateľa romike469 »

neviem..stále to nejde..
tu je celý kod..je to tam aj zadeklarované..aj všetko..ale nejde..

Kód: Vybrať všetko

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var vyst,vst:Textfile;
  vyska,bmi:Real;
  vaha:Integer;
  Form1: TForm1;
  meno:String;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
    assignFile(vst,'ziaci.txt');
  assignFile(vyst,'zdravi.txt');
  reset(vst);
  rewrite(vyst);
 while not eof(vst) do begin
   readln(vst,meno,vyska,vaha);
   bmi:=vaha/(vyska*vyska);
   Memo1.Lines.Add(meno+' '+FloatTOStr(bmi));
  end;
  writeln(vyst,meno,vyska,vaha);
  closefile(vst);
  closefile(vyst);
end;

end.
xadman
Medium Star
Medium Star
Príspevky: 305
Registrovaný: 09 mar 2011, 17:02

Re: Runtime Error 106

Príspevok od používateľa xadman »

Problém môže byť v tom, že vyska a bmi su real, a vaha je integer
Skús dať váhu takisto Real a vo vstupe bude desatinné číslo napr 80.0
romike469
Amateur
Amateur
Príspevky: 14
Registrovaný: 10 jan 2014, 20:43

Re: Runtime Error 106

Príspevok od používateľa romike469 »

Nič. Stále chyba na tom readln..
dykeer
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 102
Registrovaný: 02 jan 2011, 21:21
Kontaktovať používateľa:

Re: Runtime Error 106

Príspevok od používateľa dykeer »

Ak pouzivas Readln tymto sposobom (naplnenie premennych), je treba mat ten subor ziaci.txt zapisany pomocou writeln...on si tam dava nejaky oddelovac, ktorym neskor pri readln rozpozna dalsiu hodnotu (premennu)
Alebo si v subore ziaci.txt oddel hodnoty napr. bodkociarkou a potom pri readln si vyparsuj hodnoty do premennych...aj ked hodilo by sa pole
Napísať odpoveď