![]() |
AW: Procedure in Procedure aufrufen klappt nicht
Zitat:
|
AW: Procedure in Procedure aufrufen klappt nicht
so sieht das jetzt alles aus
Delphi-Quellcode:
unit Unit1;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Label1: TLabel; Label2: TLabel; OpenDialog1: TOpenDialog; procedure Button1Click(Sender: TObject); procedure Edit1Change(Sender: TObject); procedure Label2Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; Zeile,Zeilen:string; position:integer; implementation {$R *.lfm} { TForm1 } procedure String_Zaehler(var text:string); procedure String_Zaehler( var T : Textfile; // Datei, in der gesucht werden soll (als Textfile-Referenz) s : string; // Suchtext var Anz : Integer // Anzahl der gefundenen Stellen ); var position,laenge:integer; begin Readln(Ldatei,s); Position:=pos(Edit1.Text,s); laenge:=LENGTH(edit1.text); delete(s,position,laenge); inc(ANZ); end; procedure TForm1.Button1Click(Sender: TObject); var LDateiname : String; LDatei : Textfile; LAnzahl : Integer; begin if OpenDialog1.Execute then begin LDateiname := OpenDialog1.Filename; AssignFile( LDatei, LDateiname ); Reset( LDatei ); LAnzahl := 0; String_Zaehler( LDatei, Edit1.Text, LAnzahl ); Label2.Caption := IntToStr( LAnzahl ); end; CloseFile( LDatei ); end; procedure TForm1.Edit1Change(Sender: TObject); begin end; procedure TForm1.Label2Click(Sender: TObject); begin end; end. |
AW: Procedure in Procedure aufrufen klappt nicht
und diese meldungen gibts nun
unit1.pas(50,19) Error: Identifier not found "Ldatei" unit1.pas(51,25) Error: Identifier not found "Edit1" unit1.pas(52,26) Error: Identifier not found "edit1" unit1.pas(60,17) Fatal: Syntax error, ";" expected but "." found |
AW: Procedure in Procedure aufrufen klappt nicht
Fehlerquelle :
Zitat:
LDatei : Textfile; ist nicht in der Prozedur deklariert, in der diese Variable benutzt wird. Der benutzte Übergabeparameter ist "T", also muß dort "T" statt LDatei benutzt werden = Readln(T,s); Edit1 ist unbekannt, weil die Prozedur "String_Zaehler" nicht als zu TForm1 gehörende, sondern eigenständig deklariert wurde. Mögliche Abhilfen : Vor den Variablennamen "Form1." schreiben ODER die Prozedur TForm1 zuordnen ODER die Prozedur innerhalb von Button1Click als lokale Unterprozedur einsetzen. |
AW: Procedure in Procedure aufrufen klappt nicht
yop hab ich gesehen aber die selben fehler
So jetzt klappts |
AW: Procedure in Procedure aufrufen klappt nicht
:)
So sieht der Quelltext nun aus Hab ich das richtig erkannt das wenn ich eine procedure aufrufe ...procedure(X,Y,Z); Das X,Y,Z die Variablen aus der procedure(VAR 1;2;3) wieder gibt in der selben Reihenfolge? Und man die Variablen nicht mit dem selben Namen bezeichnen darf?
Delphi-Quellcode:
unit Unit1;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Label1: TLabel; Label2: TLabel; OpenDialog1: TOpenDialog; procedure Button1Click(Sender: TObject); procedure Edit1Change(Sender: TObject); procedure Label2Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; Zeile,Zeilen:string; position:integer; implementation {$R *.lfm} { TForm1 } procedure String_Zaehler( var T : Textfile; // Datei, in der gesucht werden soll (als Textfile-Referenz) s : string; // Suchtext var Anz : Integer // Anzahl der gefundenen Stellen ); var position,laenge:integer; text:string; begin while not eof(T) do begin Readln(T,Text); //lesen aus T(Tist LDatei) und in Text zwischen speichern Position:=pos(s,Text); //Position von s(Eingabe aus Edit1.text)in Text bestimmen laenge:=LENGTH(s); //Länge von dem Wort anzeigen delete(Text,position,laenge); //Wort löschen (aus Text) an Position des Ersten Bustabens //mit der länge(aus laenge); inc(ANZ); //ANZ hochzählen end; end; procedure TForm1.Button1Click(Sender: TObject); var LDateiname : String; LDatei : Textfile; LAnzahl : Integer; begin if OpenDialog1.Execute then begin LDateiname := OpenDialog1.Filename; AssignFile( LDatei, LDateiname ); Reset( LDatei ); LAnzahl := 0; String_Zaehler( LDatei, Edit1.Text, LAnzahl ); Label2.Caption := IntToStr( LAnzahl ); end; CloseFile( LDatei ); end; procedure TForm1.Edit1Change(Sender: TObject); begin end; procedure TForm1.Label2Click(Sender: TObject); begin end; end. |
AW: Procedure in Procedure aufrufen klappt nicht
Eigentlich können die Variablennamen bei Übergabeparametern gleich sein, wenn sie eben nicht doppelt deklariert werden. Und vor allem müssen sie an den richtigen Stellen benutzt werden. Aber Du hast es ja nun hinbekommen. Ich klinke mich also aus.
|
AW: Procedure in Procedure aufrufen klappt nicht
Eigentlich kein Fehler, aber ich würde statt
Delphi-Quellcode:
den Punkt so lösen
procedure TForm1.Button1Click(Sender: TObject);
... LAnzahl := 0;
Delphi-Quellcode:
Die Lösung von dir klappt zwar auch, aber da muss man vor der Nutzung der Prozedur zuerst die Variable löschen. Und das ist eine mögliche Fehlerquelle für die Zukunft. Und so erledigt man das Problem gleich in der Prozedur mit.
procedure String_Zaehler(
var T : Textfile; // Datei, in der gesucht werden soll (als Textfile-Referenz) s : string; // Suchtext var Anz : Integer // Anzahl der gefundenen Stellen ); var position,laenge:integer; text:string; begin Anz := 0; //<<< HIER auf Null setzten <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< while not eof(T) do |
AW: Procedure in Procedure aufrufen klappt nicht
@EMS
Du hast jetzt ein Programm, was die Anzahl der Textzeilen in einer Datei ermittelt. Die Anzahl der Vorkommnisse des Such-Strings in der Datei bekommst du so nicht. @Popov Da die procedure die Anzahl als
Delphi-Quellcode:
Parameter übergeben bekommt, muss die Variable vorher initialisiert werden.
var
Die genauen Anforderungen kennen wir nicht. Evtl. soll diese procedure (in den nächsten Schritten) auch mehrfach aufgerufen werden (mehrere Dateien) und die Anzahl soll immer weiter erhöht werden. Wenn wirklich nur die Anzahl zurückgegeben werden soll, dann wäre Anzahl in der Vorgabe ein
Delphi-Quellcode:
Parameter gewesen ;)
out
(gut, kann auch sein, dass der Lehrer diesen feinen Unterschied gar nicht kennt) |
AW: Procedure in Procedure aufrufen klappt nicht
hallo
doch ich habe einfach in die Text datei nen paar mal das Wort "Test" zegefügt und dann passte die Anzahl wie oft das Wort "Test" in meiner Textdatei vorkommt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:45 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