AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Procedure in Procedure aufrufen klappt nicht

Ein Thema von EMS · begonnen am 4. Jan 2013 · letzter Beitrag vom 10. Feb 2020
Antwort Antwort
Seite 4 von 7   « Erste     234 56     Letzte » 
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#31

AW: Procedure in Procedure aufrufen klappt nicht

  Alt 4. Jan 2013, 22:11
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 ...
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
EMS

Registriert seit: 19. Dez 2012
97 Beiträge
 
#32

AW: Procedure in Procedure aufrufen klappt nicht

  Alt 4. Jan 2013, 22:17
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.
  Mit Zitat antworten Zitat
EMS

Registriert seit: 19. Dez 2012
97 Beiträge
 
#33

AW: Procedure in Procedure aufrufen klappt nicht

  Alt 4. Jan 2013, 22:18
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
  Mit Zitat antworten Zitat
delnu
(Gast)

n/a Beiträge
 
#34

AW: Procedure in Procedure aufrufen klappt nicht

  Alt 4. Jan 2013, 22:24
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.

Geändert von delnu ( 4. Jan 2013 um 22:36 Uhr)
  Mit Zitat antworten Zitat
EMS

Registriert seit: 19. Dez 2012
97 Beiträge
 
#35

AW: Procedure in Procedure aufrufen klappt nicht

  Alt 4. Jan 2013, 22:26
yop hab ich gesehen aber die selben fehler

So jetzt klappts

Geändert von EMS ( 4. Jan 2013 um 22:41 Uhr)
  Mit Zitat antworten Zitat
EMS

Registriert seit: 19. Dez 2012
97 Beiträge
 
#36

AW: Procedure in Procedure aufrufen klappt nicht

  Alt 4. Jan 2013, 22:42


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.

Geändert von EMS ( 4. Jan 2013 um 22:44 Uhr)
  Mit Zitat antworten Zitat
delnu
(Gast)

n/a Beiträge
 
#37

AW: Procedure in Procedure aufrufen klappt nicht

  Alt 4. Jan 2013, 22:52
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.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#38

AW: Procedure in Procedure aufrufen klappt nicht

  Alt 4. Jan 2013, 23:00
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#39

AW: Procedure in Procedure aufrufen klappt nicht

  Alt 5. Jan 2013, 00:00
@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 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 out Parameter gewesen
(gut, kann auch sein, dass der Lehrer diesen feinen Unterschied gar nicht kennt)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
EMS

Registriert seit: 19. Dez 2012
97 Beiträge
 
#40

AW: Procedure in Procedure aufrufen klappt nicht

  Alt 5. Jan 2013, 14:08
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.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf