Delphi-PRAXiS
Seite 1 von 2  1 2      

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)

EMS 4. Jan 2013 18:22

Delphi-Version: 5

Procedure in Procedure aufrufen klappt nicht
 
Hallo mal wieder...Neues Programm neues Problem

Ich möchte gerne einen Text öffnen mit Opendialog --> das klappt.
Dann möchte ich diesen Auf ein Wort durchsuchen was ich im editfeld eingebe klappt auch
Jetzt soll das ganze aber mit einer extra procedure laufen das klappt nicht.

Es gibt immer einen Fehler mit der Zeile wo ich die Procedure aufrufen möchte mit dem jeweiligen 's'

Mir fällt aber keine Lösung mehr ein



Delphi-Quellcode:
implementation

{$R *.lfm}

{ TForm1 }


procedure String_Zaehler(VAR s:string;position:integer);

begin
  position:=pos('edit1.text',s);
end;



procedure TForm1.Button1Click(Sender: TObject);
var
posi: integer;
dateiname,s: string;
datei:textfile;
//position: integer;


begin
   if opendialog1.execute then
      begin
         dateiname:=opendialog1.filename;
         showmessage(dateiname);
         ASSIGNFILE(datei,dateiname);
         RESET(datei);
         while not eof(datei) do
         begin
         Readln(datei,s);
         String_Zaehler(s);
         label2.caption:=inttostr(position);
         showmessage('Zeile: '+s);
         end;
      end;
   Closefile(datei);
end;
end.

Bjoerk 4. Jan 2013 18:37

AW: Procedure in Procedure aufrufen klappt nicht
 
Bei String_Zaehler muß das var vor position und die Procedere hat 2 Parameter.

EMS 4. Jan 2013 18:41

AW: Procedure in Procedure aufrufen klappt nicht
 
mhh was meinst du mit Parameter?

ich hab das jetzt so

procedure String_Zaehler(s:string;VAR position:integer);
aber das geht auch nicht

Bjoerk 4. Jan 2013 18:45

AW: Procedure in Procedure aufrufen klappt nicht
 
jenau, und jetzt noch String_Zaehler(s, position); aufrufen :thumb:

EMS 4. Jan 2013 19:08

AW: Procedure in Procedure aufrufen klappt nicht
 
klappt nicht jetzt kommen ganz viele neue fehler ?

Sir Rufo 4. Jan 2013 19:17

AW: Procedure in Procedure aufrufen klappt nicht
 
Delphi-Quellcode:
procedure String_Zaehler(s:string; var position:integer); // <-- da
begin
  position:=pos('edit1.text',s);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
posi: integer;
dateiname,s: string;
datei:textfile;

position: integer; // <-- da

begin
   if opendialog1.execute then
      begin
         dateiname:=opendialog1.filename;
         showmessage(dateiname);
         ASSIGNFILE(datei,dateiname);
         RESET(datei);
         while not eof(datei) do
         begin
         Readln(datei,s);

         String_Zaehler(s, position ); // <-- da

         label2.caption:=inttostr(position);
         showmessage('Zeile: '+s);
         end;
      end;
   Closefile(datei);
end;

EMS 4. Jan 2013 19:30

AW: Procedure in Procedure aufrufen klappt nicht
 
Ich hab das jetzt so und jetzt kommt wieder "Error Duplicate identifier"Position".

was ist denn falsch?

Delphi-Quellcode:
implementation

{$R *.lfm}

{ TForm1 }


procedure String_Zaehler(s:string;var position:integer);

begin
  position:=pos('edit1.text',s);
end;


procedure zeichenanhaengen(VAR s:string);

begin

end;

procedure TForm1.Button1Click(Sender: TObject);
var
posi: integer;
dateiname,s: string;
datei:textfile;
position:integer;

begin
   if opendialog1.execute then
      begin
         dateiname:=opendialog1.filename;
         showmessage(dateiname);
         ASSIGNFILE(datei,dateiname);
         RESET(datei);
         while not eof(datei) do
         begin
         Readln(datei,s);
         String_Zaehler(s,position);
         label2.caption:=inttostr(position);
         end;
      end;
   Closefile(datei);
end;

Sir Rufo 4. Jan 2013 19:47

AW: Procedure in Procedure aufrufen klappt nicht
 
Häng doch mal das gesamte Project als Anhang dran ...

EMS 4. Jan 2013 19:50

AW: Procedure in Procedure aufrufen klappt nicht
 
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 Label2Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;


implementation

{$R *.lfm}

{ TForm1 }


procedure String_Zaehler(s:string;var position:integer);

begin
  position:=pos('edit1.text',s);
end;


procedure zeichenanhaengen(VAR s:string);

begin

end;

procedure TForm1.Button1Click(Sender: TObject);
var
posi: integer;
dateiname,s: string;
datei:textfile;
position:integer;

begin
   if opendialog1.execute then
      begin
         dateiname:=opendialog1.filename;
         showmessage(dateiname);
         ASSIGNFILE(datei,dateiname);
         RESET(datei);
         while not eof(datei) do
         begin
         Readln(datei,s);
         String_Zaehler(s,position);
         label2.caption:=inttostr(position);
         end;
      end;
   Closefile(datei);
end;

procedure TForm1.Label2Click(Sender: TObject);
begin

end;

end.

Sir Rufo 4. Jan 2013 19:55

AW: Procedure in Procedure aufrufen klappt nicht
 
Du hast da wohl irgendwo etwas mit
Delphi-Quellcode:
Position
benannt und das knallt jetzt.

Versuch das einmal
Delphi-Quellcode:
implementation

{$R *.lfm}

{ TForm1 }


procedure String_Zaehler(const AStr : String; var APosition : Integer );
begin
  APosition := Pos( 'edit1.text', AStr );
end;

procedure zeichenanhaengen( var AStr : String );
begin

end;

procedure TForm1.Button1Click( Sender: TObject );
var
  LPosi : Integer;
  LDateiname, LS : String;
  LDatei : Textfile;
  LPosition : Integer;
begin
   if OpenDialog1.Execute then
   begin
     LDateiname := OpenDialog1.Filename;
     ShowMessage( LDateiname );
     AssignFile( LDatei, LDateiname );
     Reset( LDatei );
     while not Eof( LDatei ) do
     begin
       Readln( LDatei, LS );
       String_Zaehler( LS, LPosition );
       Label2.Caption := IntToStr( LPosition );
     end;
   end;
   CloseFile( LDatei );
end;

EMS 4. Jan 2013 20:07

AW: Procedure in Procedure aufrufen klappt nicht
 
jetzt kommt das

unit1.pas(63,38) Hint: Local variable "Lposition1" does not seem to be initialized
unit1.pas(64,44) Error: Identifier not found "LPosition"
unit1.pas(67,19) Error: Identifier not found "datei"
unit1.pas(77) Fatal: There were 2 errors compiling module, stopping

Sir Rufo 4. Jan 2013 20:10

AW: Procedure in Procedure aufrufen klappt nicht
 
Zitat:

Zitat von EMS (Beitrag 1197674)
jetzt kommt das

unit1.pas(63,38) Hint: Local variable "Lposition1" does not seem to be initialized
unit1.pas(64,44) Error: Identifier not found "LPosition"
unit1.pas(67,19) Error: Identifier not found "datei"
unit1.pas(77) Fatal: There were 2 errors compiling module, stopping

Kann es sein, dass du die Vorschläge hier in dein Programm eintippst und nicht per Copy'n'Paste überträgst?

EMS 4. Jan 2013 20:13

AW: Procedure in Procedure aufrufen klappt nicht
 
ja ich ändere das programm nach den vorschlägen

Sir Rufo 4. Jan 2013 20:15

AW: Procedure in Procedure aufrufen klappt nicht
 
Zitat:

Zitat von EMS (Beitrag 1197676)
ja ich ändere das programm nach den vorschlägen

ich sag da jetzt mal nichts mehr zu :wall:

EMS 4. Jan 2013 20:17

AW: Procedure in Procedure aufrufen klappt nicht
 
mhh ich hab das jetzt kopiert jetzt kommen keine Fehler mehr.
Das verstehe ich nicht ??

Aber das Programm zeigt mir jetzt nicht an anwelcher Position der Wert aus dem Editfeld steht?

Sir Rufo 4. Jan 2013 20:20

AW: Procedure in Procedure aufrufen klappt nicht
 
Zitat:

Zitat von EMS (Beitrag 1197680)
mhh ich hab das jetzt kopiert jetzt kommen keine Fehler mehr.
Das verstehe ich nicht ??

Ja, ist schon seltsam, das wir hier Code posten, der keine Fehler hat ... wir wollten das in diesem jahr eigentlich ändern, aber die Gewohnheit ... :roll:
Zitat:

Zitat von EMS (Beitrag 1197680)
Aber das Programm zeigt mir jetzt nicht an anwelcher Position der Wert aus dem Editfeld steht?

Und wo hast du dem Programm mitgeteilt, dass du genau das willst?

Ich sehe das nicht ... und dein Compiler sieht das so wie ich ...

EMS 4. Jan 2013 20:24

AW: Procedure in Procedure aufrufen klappt nicht
 
ich hab da doch stehen label2.caption Lposition
da würde ich erwarten das dort die Position dann angezeigt wird?

delnu 4. Jan 2013 20:27

AW: Procedure in Procedure aufrufen klappt nicht
 
Das würde ich auch so sehen. Die Stelle, wo das ausgegeben werden soll, heißt im Original
Zitat:

label2.caption:=inttostr(position);
showmessage('Zeile: '+s);
Und der Übergabeparamter war durchaus schon deklariert, hatte allerdings einen anderen Namen und wurde lediglich nicht eingesetzt.

Sir Rufo 4. Jan 2013 20:29

AW: Procedure in Procedure aufrufen klappt nicht
 
Zitat:

Zitat von EMS (Beitrag 1197682)
ich hab da doch stehen label2.caption Lposition
da würde ich erwarten das dort die Position dann angezeigt wird?

und, was zeigt er an?
nichts, bunte Farben, irgendwelche Zeichen?

Sir Rufo 4. Jan 2013 20:35

AW: Procedure in Procedure aufrufen klappt nicht
 
Zitat:

Zitat von delnu (Beitrag 1197683)
Das würde ich auch so sehen. Die Stelle, wo das ausgegeben werden soll, heißt im Original
Zitat:

label2.caption:=inttostr(position);
showmessage('Zeile: '+s);
Und der Übergabeparamter war durchaus schon deklariert, hatte allerdings einen anderen Namen und wurde lediglich nicht eingesetzt.

Das sagt lediglich aus, dass der Wert, der sich in
Delphi-Quellcode:
position
bzw.
Delphi-Quellcode:
LPosition
befindet als String in das Label geschrieben wird - und ob man es glaubt oder nicht, genau das passiert, und zwar ganz genau das.

UPDATE: Kleiner Tip von mir, ich wette das dort im Label
Delphi-Quellcode:
0
steht.

EMS 4. Jan 2013 20:41

AW: Procedure in Procedure aufrufen klappt nicht
 
ja tut es auch aber ich kann es nicht nachvollziehen wieso

Popov 4. Jan 2013 20:41

AW: Procedure in Procedure aufrufen klappt nicht
 
Unabhängig des Problems, eine Zwischenfrage - hat es einen Grund wieso du die Textdatei über ASSIGNFILE öffnest? Mit modernen Delphi mitteln wäre das um einiges einfacher.

EMS 4. Jan 2013 20:43

AW: Procedure in Procedure aufrufen klappt nicht
 
Schreiben Sie eine Procedure, die einen Text nach einem String durchsucht und die Anzahl über eine
Referenzvariable ausgibt.(Procedure String_Zaehler(VAR T:Textfile; s:string, VAR Anz: Integer)).
Schreiben Sie auch das Rahmenprogramm dazu in dem der Text über ein opendialog ausgewählt wird.
Der der zu suchende String wird über ein Editfeld eingegeben und die Anzahl in einem Label ausgegeben.


das ist die aufgabe

Sir Rufo 4. Jan 2013 20:44

AW: Procedure in Procedure aufrufen klappt nicht
 
Zitat:

Zitat von EMS (Beitrag 1197686)
ja tut es auch aber ich kann es nicht nachvollziehen wieso

Ok, wo in deinem Programm ermittelst du die Position des Edit-Feld-Werts in der Text-Datei?

EMS 4. Jan 2013 20:48

AW: Procedure in Procedure aufrufen klappt nicht
 
in der Procedure String_Zaehler mit position:=pos('edit1.text',s)

und das s kommt aus dem Readln aus dem Button

Sir Rufo 4. Jan 2013 20:53

AW: Procedure in Procedure aufrufen klappt nicht
 
Zitat:

Zitat von EMS (Beitrag 1197690)
mit position:=pos('edit1.text',s)

Nein, das da gibt dir die Position von dem String
Delphi-Quellcode:
'edit1.text'
in dem String
Delphi-Quellcode:
s
zurück.

Wenn du auf den Wert des Edit-Feldes zugreifen möchtest, dann so
Delphi-Quellcode:
Edit1.Text
Alles was du in Anführungszeichen setzt ist ein String.
Delphi-Quellcode:
position := pos( 'ich bin ein konstanter string im Quelltext', s )

Sir Rufo 4. Jan 2013 20:58

AW: Procedure in Procedure aufrufen klappt nicht
 
Zitat:

Zitat von EMS (Beitrag 1197688)
Schreiben Sie eine Procedure, die einen Text nach einem String durchsucht und die Anzahl über eine
Referenzvariable ausgibt.(Procedure String_Zaehler(VAR T:Textfile; s:string, VAR Anz: Integer)).
Schreiben Sie auch das Rahmenprogramm dazu in dem der Text über ein opendialog ausgewählt wird.
Der der zu suchende String wird über ein Editfeld eingegeben und die Anzahl in einem Label ausgegeben.


das ist die aufgabe

Wenn das die Aufgabe ist, warum ist dann deine procedure nicht so deklariert?

Deine
Delphi-Quellcode:
procedure String_Zaehler(const AStr : String; var APosition : Integer );
begin
  ...
end;
und so soll die laut Aufgabe aussehen
Delphi-Quellcode:
procedure String_Zaehler( var T : Textfile; s : string; var Anz : Integer );
begin
  ...
end;
:gruebel:

UPDATE

Ich kann ja mal von Lehrerisch auf Deutsch übersetzen ;)
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
);
begin
  ...
end;
und das geforderte Rahmenprogramm hast du ja schon fertig, darum baue ich dir diese Procedure da mal ein:
Delphi-Quellcode:
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;

EMS 4. Jan 2013 21:00

AW: Procedure in Procedure aufrufen klappt nicht
 
weil ich so bisher noch gar nix hinbekommen habe und jetzt so stückchen für stückchen auf diese procedur hinarbeiten wollte

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

und danch nicht mehr

delnu 4. Jan 2013 21:02

AW: Procedure in Procedure aufrufen klappt nicht
 
Zitat:

Wenn das die Aufgabe ist, warum ist dann deine procedure nicht so deklariert?
Vielleicht gibt es in der Hinsicht Spielraum ? :lol:

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.

Sir Rufo 4. Jan 2013 21:05

AW: Procedure in Procedure aufrufen klappt nicht
 
Zitat:

Zitat von EMS (Beitrag 1197696)
weil ich so bisher noch gar nix hinbekommen habe und jetzt so stückchen für stückchen auf diese procedur hinarbeiten wollte

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

und danch nicht mehr

schau mal in den Beitrag #27 ;)

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 15:31 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz