882 Benutzer online
23. November 2024, 17:11:20

Windows Community



Zum Thema Fehler in Pascal-Programmierung - Hallo,Mein Enkel hatte ein Programm in Pascal geschrieben, das in Unterverzeichnissen und deren Dateien nach bestimmten vierstelligen Zahlencodes sucht und dann... im Bereich Programmierung und Scripting
Autor Thema:

Fehler in Pascal-Programmierung

 (Antworten: 5, Gelesen 5813 mal)

  • Team
  • Windows 98SE
  • Beiträge: 840
  • Errare humanum est!
Fehler in Pascal-Programmierung
« am: 12. Januar 2011, 18:09:10 »
Hallo,

Mein Enkel hatte ein Programm in Pascal geschrieben, das in Unterverzeichnissen und deren Dateien nach bestimmten vierstelligen Zahlencodes sucht und dann gezielte Abschnitte dieser Dateien in eine andere Datei kopiert.
Leider kopiert das Programm alles doppelt in die neue Datei. Wo liegt der Fehler und wieso doppelt?

(auto)bot

(auto)admin

  • News-Redakteur
  • Windows XP
  • Beiträge: 5001
« Antwort #1 am: 12. Januar 2011, 18:12:24 »
Da müßte man den Source-Code des Programms sehen.

  • Team
  • Windows 98SE
  • Beiträge: 840
  • Errare humanum est!
« Antwort #2 am: 12. Januar 2011, 18:37:19 »
Der Quellcode:

program suchen;
uses crt,sysutils;

const n='aufgabe.tex';
var a:text;


{Auslesen der Dateien und schreiben in neue Datei}

procedure lesen(d:string);
var f:text;
c,s:string;
b:boolean;
begin
b:=false;
assignfile(f,d);
{$i-} reset(f);
if ioresult=0 then
begin
while not eof(f) do
begin
readln(f,c);
while length(c)>0 do
begin
if pos(#10,c)>0
then
begin
s:=copy(c,1,pos(#10,c));
delete(c,1,pos(#10,c));
end
else
begin
s:=copy(c,1,length(c));
delete(c,1,length(c));
end;
if length(s)>0 then
begin
if (b) and (pos('\end{hmaufgabe}',s)=0) then writeln(a,s);
if (((not b) and (pos(paramstr(1),s)>0))
OR ((not b) and (pos(paramstr(2),s)>0))
OR ((not b) and (pos(paramstr(3),s)>0))
OR ((not b) and (pos(paramstr(4),s)>0))
OR ((not b) and (pos(paramstr(5),s)>0))) then
begin
b:=true;
writeln(a,'\item');
end;
if (pos('\end{hmaufgabe}',s)>0) then b:=false;
end;
end;
end;
closefile(f); {$i+}
end;
end;


{Suchen der Labels}

procedure suche(s,t:string);
var r :integer;
p :tsearchrec;
begin

r:=findfirst(s+t,faanyfile,p);
while (r=0) do
begin
if ((p.attr<>32) and
(p.name[1]<>'.')) then suche(s+p.name+'/',t)
else
begin
if (p.name[1]<>'.') and
(extractfileext(p.name)='.tex') then lesen(s+p.name);
end;
r:=findnext(p);
end;
findclose(p);

end;


{Header-Datei kopieren}

procedure dateikopie;
var lesen:string;
var quelle,ziel:text;
const quelldat='header.tex';
const zieldat='aufgabe.tex';

begin

assign(quelle,quelldat);
assign(ziel,zieldat);
reset(quelle);
rewrite(ziel);
while not eof(quelle) do begin
readln(quelle,lesen);
writeln(ziel,lesen);
end;

close(quelle);
close(ziel);
end;


{Hauptprogramm}

begin

clrscr;

if paramstr(1)<>'' then
begin
dateikopie;

writeln('> Header-Datei kopiert ...');

assign(a,n);
append(a);
suche('./','*.*');

writeln('> Suche im aktuellen Verzeichnis ...');
writeln('> Elemente werden in "aufgabe.tex" gespeichert...');

writeln(a,'\end{enumerate}');
writeln(a,'\end{document}');
close(a);
end
else writeln('> Kein Parameter angegeben!');

writeln('> Ende');
writeln;

end.

  • News-Redakteur
  • Windows XP
  • Beiträge: 5001
« Antwort #3 am: 12. Januar 2011, 18:53:11 »
Das ist mir zu kompliziert. Erstens weil ich Pascal nicht kenne und zweitens weil der Code wirklich völlig unstrukturiert ist (keine Tabs etc.). Unlesbar. Und 135 Zeilen habe ich mir auch nicht vorgestellt...

  • Team
  • Windows 98SE
  • Beiträge: 840
  • Errare humanum est!
« Antwort #4 am: 12. Januar 2011, 20:26:38 »
Tja, wie gesagt, meine Enkel haben sich im Pascal irgend wie verheddert, jetzt brauche ich einen guten Rat.

  • Team
  • Windows 98SE
  • Beiträge: 840
  • Errare humanum est!
Re: Fehler in Pascal-Programmierung
« Antwort #5 am: 15. Januar 2011, 17:23:32 »
Fehler gefunden 

:Der Quellcode:
:
:program suchen;
:uses crt,sysutils;
:
:const n='aufgabe.tex';
:var a:text;
:
:
:{Auslesen der Dateien und schreiben in neue Datei}
:
:procedure lesen(d:string);
:var f:text;
:    c,s:string;
:    b:boolean;
:begin
: b:=false;
: assignfile(f,d);
: {$i-} reset(f);
: if ioresult=0 then
:  begin
:   while not eof(f) do
:    begin
:     readln(f,c);
:     while length(c)>0 do
:      begin
:       if pos(#10,c)>0
:        then
:         begin
:          s:=copy(c,1,pos(#10,c));
:          delete(c,1,pos(#10,c));
:         end
:        else
:         begin
:          s:=copy(c,1,length(c));
:          delete(c,1,length(c));
:         end;
:       if length(s)>0 then
:        begin
:         if (b) and (pos('\end{hmaufgabe}',s)=0) then
:writeln(a,s);
:         if (((not b) and (pos(paramstr(1),s)>0))
:  OR ((not b) and (pos(paramstr(2),s)>0))
:  OR ((not b) and (pos(paramstr(3),s)>0))
:  OR ((not b) and (pos(paramstr(4),s)>0))
:  OR ((not b) and (pos(paramstr(5),s)>0))) then
:          begin
:           b:=true;
:           writeln(a,'\item');
:          end;
:         if (pos('\end{hmaufgabe}',s)>0) then b:=false;
:        end;
:      end;
:    end;
:   closefile(f); {$i+}
:  end;
:end;
:
:{Suchen der Labels}
:
:procedure suche(s,t:string);
:var r  :integer;
:    p  :tsearchrec;
:begin
:
:r:=findfirst(s+t,faanyfile,p);
:while (r=0) do
: begin
:  if ((p.attr<>32) and
:     (p.name[1]<>'.')) then suche(s+p.name+'/',t)
:                      else
:                       begin
:                        if (p.name[1]<>'.') and
:                           (extractfileext(p.name)='.tex')
:then lesen(s+p.name);
:                       end;
:  r:=findnext(p);
: end;
:findclose(p);
:
:end;
:
:
:{Header-Datei kopieren}
:
:procedure dateikopie;
:var lesen:string;
:var quelle,ziel:text;
:const quelldat='header.tex';
:const zieldat='aufgabe.tex';
:
:  begin
:
:  assign(quelle,quelldat);
:  assign(ziel,zieldat);
:   reset(quelle);
:   rewrite(ziel);
:   while not eof(quelle) do begin
:    readln(quelle,lesen);
:    writeln(ziel,lesen);
:   end;
:
: close(quelle);
: close(ziel);
:end;
:
:
:{Hauptprogramm}
:
:begin
:
: clrscr;
:
: if paramstr(1)<>'' then
:                     begin
:                      dateikopie;
:
:                      writeln('> Header-Datei kopiert
:...');
:
:                      assign(a,n);
:                      append(a);
:                      suche('./','*.*');
:
:                      writeln('> Suche im aktuellen
:Verzeichnis ...');
:                      writeln('> Elemente werden in
:"aufgabe.tex" gespeichert...');
:
:                      writeln(a,'\end{enumerate}');
:                      writeln(a,'\end{document}');
:                      close(a);
:                     end
:                    else writeln('> Kein Parameter
:angegeben!');
:
: writeln('> Ende');
: writeln;
:
:end.

windows 64bit programm fehler fehlercode fehlermeldung lesen schreiben 0x80070422 win7
quellcode textdateien beantworten bing programmierung str go-windows pascal 0x0000007f pascalprogrammierung