Delphi-PRAXiS
Seite 2 von 2     12   

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 5. Jan 2013 13:31

AW: Procedure in Procedure aufrufen klappt nicht
 
Zitat:

Zitat von EMS (Beitrag 1197740)
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.

Logisch, wenn das Wort "Test" genauso häufig vorkommt, wie die Textdatei Zeilen hat, dann kommt das schon hin.

Du solltest dir auch mal ein vernüftiges Testszenario überlegen.
Code:
Test
nur so
oder so
und so
noch ein Test
Test Test Test
Dieser Text liefert bei der Suche nach "Test" 6. Sollte aber 5 sein.
Code:
Test Test Test
Test Test
Dieser Text liefert bei der Suche nach "Test" 2. Sollte aber 5 sein.

Popov 5. Jan 2013 13:36

AW: Procedure in Procedure aufrufen klappt nicht
 
Ganz wichtig - nicht nur "Test Test", sondern auch "TestTest" ohne Leerzeichen. Aber auch "Testest". In dem Fall ist wohl alles in Ordnung, aber je nachdem wie man mit Delete umgeht, könnten hier mögliche Fehlerquellen liegen.

EMS 5. Jan 2013 13:42

AW: Procedure in Procedure aufrufen klappt nicht
 
mhh ich hab das noch mal geprüft klappt doch irgendwie nicht mhh das ist doof
hab keine Ahnung mehr wie ich das richtig hinbekommen soll

Sir Rufo 5. Jan 2013 13:44

AW: Procedure in Procedure aufrufen klappt nicht
 
Zitat:

Zitat von EMS (Beitrag 1197756)
mhh ich hab das noch mal geprüft klappt doch irgendwie nicht mhh das ist doof
hab keine Ahnung mehr wie ich das richtig hinbekommen soll

Es soll ja nur gezählt werden wenn der SuchText gefunden wird.
Wenn in deiner Suchroutine aber kein wenn
Delphi-Quellcode:
if
o.ä. auftaucht, dann weiß ich sofort, da tut was nicht ;)

EMS 5. Jan 2013 13:48

AW: Procedure in Procedure aufrufen klappt nicht
 
mhh hab da jetzt einfach raus gemacht und geht nich

Delphi-Quellcode:
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);
     IF Position > 0 then
     begin
     inc(Position);                //ANZ hochzählen
     end;

end;
end;

mkinzler 5. Jan 2013 13:52

AW: Procedure in Procedure aufrufen klappt nicht
 
Delphi-Quellcode:
inc(Position); //ANZ hochzählen
Falsche Variable?

Sir Rufo 5. Jan 2013 13:57

AW: Procedure in Procedure aufrufen klappt nicht
 
Man sieht es besser, wenn man den gesamten Kontext betrachtet und den alten Code auskommentiert:
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
  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);
     // -- alt --
     // inc( ANZ ); // ANZ hochzählen

     // -- neu --
     IF Position > 0 then
     begin
       inc( Position ); // ANZ hochzählen
     end;
  end;
end;

EMS 5. Jan 2013 13:58

AW: Procedure in Procedure aufrufen klappt nicht
 
ich denke wenn der ja bei position dann einen Wert hat dann soll der sich den merken und dann die ANZ hochzählen
Oder liege ich da falsch?

mkinzler 5. Jan 2013 14:02

AW: Procedure in Procedure aufrufen klappt nicht
 
Nein:
1. Hast du ja den gefundenen Suchtext aus dem String entfernt, daher ist die ursprüngliche Postion uninteressnat.
2. Wenn due den Text an Position 100 gefunden hast hast du ihn 1 mal gefunden und nicht 101 mal
3. Postion wird mit der nächsten Fundpostion oder ein wieder überschrieben

Sir Rufo 5. Jan 2013 14:02

AW: Procedure in Procedure aufrufen klappt nicht
 
Zitat:

Zitat von EMS (Beitrag 1197765)
ich denke wenn der ja bei position dann einen Wert hat dann soll der sich den merken und dann die ANZ hochzählen
Oder liege ich da falsch?

Dann zähl doch auch
Delphi-Quellcode:
ANZ
hoch ... :roll:

Damit
Delphi-Quellcode:
inc( Position ); // ANZ hochzählen
wird
Delphi-Quellcode:
position
hochgezählt, auch wenn der Kommentar etwas anderes verlauten lässt, aber es ist nur ein Kommentar ;)

EMS 5. Jan 2013 14:05

AW: Procedure in Procedure aufrufen klappt nicht
 
ich hab das jetzt so und es wird immer 0 angezeigt

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
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);
     IF Position > 0 then
     begin
     inc(position);                //ANZ hochzählen
     end;

end;
end;

Sir Rufo 5. Jan 2013 14:09

AW: Procedure in Procedure aufrufen klappt nicht
 
Du musst die Variable
Delphi-Quellcode:
Anz
erhöhen und nicht
Delphi-Quellcode:
position
.
Denn
Delphi-Quellcode:
Anz
wird zurückgegeben.

mkinzler 5. Jan 2013 14:09

AW: Procedure in Procedure aufrufen klappt nicht
 
Position ist die falsche Variable!

EMS 5. Jan 2013 14:15

AW: Procedure in Procedure aufrufen klappt nicht
 
ja mit ANZ kommt eine 1 im Label aber es sind 2 mal "Test" im text

Bjoerk 5. Jan 2013 15:08

AW: Procedure in Procedure aufrufen klappt nicht
 
Das Wort kann ja in der Zeile auch mehrfach vorkommen. Statt des if also zum Beispiel eine while Schiefe:

Delphi-Quellcode:
    Position := Pos(S, Text);
    while Position > 0 do
    begin
      Inc(Anzahl);
      Delete(Text, Position, Length(S));
      Position := Pos(S, Text);
    end;

EMS 5. Jan 2013 15:34

AW: Procedure in Procedure aufrufen klappt nicht
 
Damit scheint es jetzt richtig zu sein

muschelknacker 20. Jan 2020 18:44

AW: Procedure in Procedure aufrufen klappt nicht
 
hat jemand für mich auch eine Lösung ??
in Object-Pascal versuche ich folgendes:

procedure TForm1.Pg3ausgabeExit(Sender: TObject);
begin
Dbf2Bestand.Filtered:=true;
// hier soll die untere procedure nochmal aufgerufen werden,klappt aber nicht
end;


procedure TForm1.Dbf2BestandFilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
Accept := Dbf2Bestand.FieldByName('ORT').AsString = 'LAGER';
end;

danke für hilfe.....

himitsu 20. Jan 2020 18:48

AW: Procedure in Procedure aufrufen klappt nicht
 
Zitat:

Zitat von muschelknacker (Beitrag 1455633)
Delphi-Quellcode:
// hier soll die untere procedure nochmal aufgerufen werden,klappt aber nicht

Wieso nicht?
Text der Fehlermeldung oder so. :zwinker:

Für deine Prozeduren Methoden gibt es in der Typ-Deklaration quasi eine Forward-Deklaration, womit diese Funktion an jener Stelle natürlich bereits bekannt ist. (innerhalb des selben Typen)

PS:
[DELPHI]
dein Delphi-Code
[/DELPHI]


[EDIT]
Du willst die Funktion nicht selber aufrufen, sondern es soll "neu" gefiltert werden?
Hängt die Methde auch wirklich am DataSet.OnFilterIrgendwas dran?
Oder wenn sich das Filterkriteitum geändert hat (die Auswertung im Dbf2BestandFilterRecord), dann einfach
Delphi-Quellcode:
procedure TForm1.Pg3ausgabeExit(Sender: TObject);
begin
  Dbf2Bestand.Filtered:=false;
  Dbf2Bestand.Filtered:=true;
end;
PS: Wie bei vielen Events bekommt man das "richtige" Objekt als Parameter (z.B. oftmals das "Sender") mit rein.
Delphi-Quellcode:
procedure TForm1.Dbf2BestandFilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
  Accept := DataSet.FieldByName('ORT').AsString = 'LAGER';
end;
Ist praktischer, um solche Funktionen wiederverwenden zu konnen und knall nicht, wenn man sich mal beim Namen verschreibt (Dank Autovervollständigung den falschen Namen erwischt) oder wenn die Komponente umbenannt wurde.

muschelknacker 10. Feb 2020 17:34

AW: Procedure in Procedure aufrufen klappt nicht
 
Guten Abend,
nein nein, keine Fehlermeldung.
Im Kopf klappt es nicht.
Ich mach nochmal gaaaaaanz langsam :

In meiner Anwendung gibt es unter anderem ein PageControl mit 3 Seiten.
Sagen wir mal P1, P2, P3.
Auf jeder Seite befindet sich ein DBGrid und soll von einer einzigen Datenmenge über dieselbe DataSource jeweils
ein anderes Filterkriterium darstellen.
Für P1 sieht das so aus und klappt :

Code:
procedure TForm1.Dbf2BestandFilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
   Accept := (Dbf2Bestand.FieldByName('SCHUBLADE').AsString = 'ALLE') or (Dbf2Bestand.FieldByName('SCHUBLADE').AsString = 'BE');

end;

Für P2 muss das so aussehen :

Code:
   Accept := Dbf2Bestand.FieldByName('SCHUBLADE').AsString = 'BE';
Für P3 muss es so aussehen :

Code:
 Accept := Dbf2Bestand.FieldByName('SCHUBLADE').AsString = 'RAUS';
Wie krieg ich das alles in einen Topf ???

:roll:

Danke fürs nachdenken.............

p80286 10. Feb 2020 21:59

AW: Procedure in Procedure aufrufen klappt nicht
 
Und wo ist das Problenm?
Drei Seiten, drei Abfragen, drei Ergebnismengen.

Gruß
K-H

P.S.
Entschuldigung DBgrid hatte ich übersehen.
Vergiss es.

hoika 10. Feb 2020 22:06

AW: Procedure in Procedure aufrufen klappt nicht
 
Hallo,
habe gerade ein Delphi da.

Beim Wechsel des TabSheets folgendes aufrufen

Dbf2Bestand.Filtered:=false;
Dbf2Bestand.Filtered:=true;

und dann

procedure TForm1.Dbf2BestandFilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
if PageControl.ActivePage=P1 then
begin
Accept := (Dbf2Bestand.FieldByName('SCHUBLADE').AsString = 'ALLE') or
end;

if PageControl.ActivePage==P2
(Dbf2Bestand.FieldByName('SCHUBLADE').AsString = 'BE');


usw.

d.h. du filterst immer neu beim Wechseln des TabSheets.

Willst Du es etwas mehr "on yout finger tips" -> werf das TDBGrid weg und nimm das normale TStringGrid.

Luckie 10. Feb 2020 22:25

AW: Procedure in Procedure aufrufen klappt nicht
 
Mit case wird es in diesem Fall übersichtlicher.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 Uhr.
Seite 2 von 2     12   

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