Delphi-PRAXiS
Seite 4 von 7   « Erste     234 56     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Procedure in Procedure aufrufen klappt nicht (https://www.delphipraxis.net/172452-procedure-procedure-aufrufen-klappt-nicht.html)

Sir Rufo 4. Jan 2013 21:11

AW: Procedure in Procedure aufrufen klappt nicht
 
Zitat:

Zitat von delnu (Beitrag 1197697)
Zitat:

und als ich am anfang die '' nicht hatte gabs immer den Fehler:

unit1.pas(42,24) Error: Identifier not found "edit1"
unit1.pas(78) Fatal: There were 1 errors compiling module, stopping
Das sieht doch ganz so aus, als ob gar kein Editfeld vorhanden ist oder es anders benannt wurde.

oder die procedure weiß nichts von Edit1, weil es ja keine Methode von TForm1 ist ... :roll:

EMS 4. Jan 2013 21:17

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.

EMS 4. Jan 2013 21:18

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

delnu 4. Jan 2013 21:24

AW: Procedure in Procedure aufrufen klappt nicht
 
Fehlerquelle :
Zitat:

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
);
Die obere Deklaration muß weg.

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.

EMS 4. Jan 2013 21:26

AW: Procedure in Procedure aufrufen klappt nicht
 
yop hab ich gesehen aber die selben fehler

So jetzt klappts

EMS 4. Jan 2013 21:42

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.

delnu 4. Jan 2013 21:52

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.

Popov 4. Jan 2013 22:00

AW: Procedure in Procedure aufrufen klappt nicht
 
Eigentlich kein Fehler, aber ich würde statt

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
...
    LAnzahl := 0;
den Punkt so lösen

Delphi-Quellcode:
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
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.

Sir Rufo 4. Jan 2013 23:00

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:
var
Parameter übergeben bekommt, muss die Variable vorher initialisiert werden.

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:
out
Parameter gewesen ;)
(gut, kann auch sein, dass der Lehrer diesen feinen Unterschied gar nicht kennt)

EMS 5. Jan 2013 13:08

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.
Seite 4 von 7   « Erste     234 56     Letzte »    

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