[gelöst] Was hab ich falsch gemacht?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
heheracer
Beiträge: 54
Registriert: Mo 17. Nov 2014, 16:45

[gelöst] Was hab ich falsch gemacht?

Beitrag von heheracer »

hab ein kleines problem mit dem code, lazarus sagt mir es liege in zeile 22 bei append(f). das finde sehr komisch, kein compiler fehler oder so. hat auch schon einmal funktioniert, dann habe ich aber aus wvar+wvar 2*wvar gemacht, dann gings nicht mehr und auch nach rückgängig machen gings nicht mehr.

Code: Alles auswählen

program test4;
 
uses
 Sysutils;
 
var
 f:textfile; {File}
 fname:string; {Filename}
 lnn:integer; {Anzahl der lines}
 wvar:integer; {Whilevariable}
 i:string; {Text/Input}
 
begin
 writeln('Filename?');
 readln(fname);
 writeln('Number of Lines?');
 readln(lnn);
 wvar:=lnn;
 while lnn < 2*wvar do
  begin
   assignfile(f, fname);
   append(f);
   writeln('Text');
   readln(i);
   writeln(f, i);
   closefile(f);
   lnn:=lnn+1
  end;
 readln;
 end. 
Zuletzt geändert von heheracer am So 1. Feb 2015, 12:24, insgesamt 1-mal geändert.

Mathias
Beiträge: 6938
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Was hab ich falsch gemacht?

Beitrag von Mathias »

Bei mir geht es so:

Code: Alles auswählen

if FileExists(fname) then
   Append(f)
else Rewrite(f);
//append(f);    
Wieso willst du in der Schleife die Datei jedes mal öffnen und wieder schliessen ?

Du könntest vor while die Datei einmal öffnen und und nach end(while) wieder schliessen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

heheracer
Beiträge: 54
Registriert: Mo 17. Nov 2014, 16:45

Re: Was hab ich falsch gemacht?

Beitrag von heheracer »

ok ich habs geändert aber ich hab diesen fehler:

test4.lpr(28,18) Error: Identifier not found "FileExists"
test4.lpr(41) Fatal: There were 1 errors compiling module, stopping
test4.lpr(28,8) Error: Bezeichner nicht gefunden: FileExists

Code: Alles auswählen

program Project1;
 
{$mode objfpc}{$H+}
 
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };
 
var
 f:textfile; {File}
 fname:string; {Filename}
 lnn:integer; {Anzahl der lines}
 wvar:integer; {Whilevariable}
 i:string; {Text/Input}
 
begin
 writeln('Filename?');
 readln(fname);
 writeln('Number of Lines?');
 readln(lnn);
 wvar:=lnn;
 while lnn < 2*wvar do
  begin
   assignfile(f, fname);
    if FileExists(fname)
     then
      Append(f)
     else
      Rewrite(f);
   writeln('Text');
   readln(i);
   writeln(f, i);
   lnn:=lnn+1
  end;
 closefile(f);
 readln;
end.

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Was hab ich falsch gemacht?

Beitrag von Komoluna »

Füg mal beim uses Abschnitt "FileUtil" ein.

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Mathias
Beiträge: 6938
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Was hab ich falsch gemacht?

Beitrag von Mathias »

Bei uses kommt noch SysUtils rein.

Bei deinem ersten Posting hat du es schon stehen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Was hab ich falsch gemacht?

Beitrag von Komoluna »

Stimmt, SysUtils fehlt wieder.

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

heheracer
Beiträge: 54
Registriert: Mo 17. Nov 2014, 16:45

Re: Was hab ich falsch gemacht?

Beitrag von heheracer »

Code: Alles auswählen

program editor;
 
uses
 Sysutils;
 
var
 f:textfile; {File}
 fname:string; {Filename}
 lnn:integer; {Anzahl der lines}
 wvar:integer; {Whilevariable}
 i:string; {Text/Input}
 
begin
 writeln('Filename?');
 readln(fname);
 writeln('Number of Lines?');
 readln(lnn);
 wvar:=lnn;
 while lnn < 2*wvar do
  begin
   assignfile(f, fname);
    if FileExists(fname)
     then
      Append(f)
     else
      Rewrite(f);
   writeln('Text');
   readln(i);
   writeln(f, i);
   lnn:=lnn+1
  end;
 closefile(f);
 readln;
end.
das hab ich jetzt, wenn fileutil hinzufüge sagt er braucht es nicht, hab aber wieder denn append error.

heheracer
Beiträge: 54
Registriert: Mo 17. Nov 2014, 16:45

Re: Was hab ich falsch gemacht?

Beitrag von heheracer »

Code: Alles auswählen

program editor;
 
uses
 Sysutils, classes;
 
var
 f:textfile; {File}
 fname:string; {Filename}
 lnn:integer; {Anzahl der lines}
 wvar:integer; {Whilevariable}
 i:string; {Text/Input}
 
begin
 writeln('Filename?');
 readln(fname);
 writeln('Number of Lines?');
 readln(lnn);
 wvar:=lnn;
 while lnn < 2*wvar do
  begin
   assignfile(f, fname);
    if FileExists(fname)
     then
      Append(f)
     else
      Rewrite(f);
   writeln('Text');
   readln(i);
   writeln(f, i);
   lnn:=lnn+1;
   closefile(f);
  end;
 readln;
end.
lag am colsefile, jetzt gehts, danke für die super hilfe!

Mathias
Beiträge: 6938
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Was hab ich falsch gemacht?

Beitrag von Mathias »

Vertausche diese beiden Zeilen und es geht wieder.

Code: Alles auswählen

  end;
 closefile(f);

Was willst du überhaput genau machen ?
Ist es richtig, das deine Datei "Filename " immer grösser werden sollte, oder willst du lieber, das bei jedem Programm-Start eine neue Datei erzeugt wird ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten