![]() |
AW: Procedure in Procedure aufrufen klappt nicht
Zitat:
Du solltest dir auch mal ein vernüftiges Testszenario überlegen.
Code:
Dieser Text liefert bei der Suche nach "Test" 6. Sollte aber 5 sein.
Test
nur so oder so und so noch ein Test Test Test Test
Code:
Dieser Text liefert bei der Suche nach "Test" 2. Sollte aber 5 sein.
Test Test Test
Test Test |
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.
|
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 |
AW: Procedure in Procedure aufrufen klappt nicht
Zitat:
Wenn in deiner Suchroutine aber kein wenn
Delphi-Quellcode:
o.ä. auftaucht, dann weiß ich sofort, da tut was nicht ;)
if
|
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; |
AW: Procedure in Procedure aufrufen klappt nicht
Delphi-Quellcode:
Falsche Variable?
inc(Position); //ANZ hochzählen
|
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; |
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? |
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 |
AW: Procedure in Procedure aufrufen klappt nicht
Zitat:
Delphi-Quellcode:
hoch ... :roll:
ANZ
Damit
Delphi-Quellcode:
wird
inc( Position ); // ANZ hochzählen
Delphi-Quellcode:
hochgezählt, auch wenn der Kommentar etwas anderes verlauten lässt, aber es ist nur ein Kommentar ;)
position
|
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; |
AW: Procedure in Procedure aufrufen klappt nicht
Du musst die Variable
Delphi-Quellcode:
erhöhen und nicht
Anz
Delphi-Quellcode:
.
position
Denn
Delphi-Quellcode:
wird zurückgegeben.
Anz
|
AW: Procedure in Procedure aufrufen klappt nicht
Position ist die falsche Variable!
|
AW: Procedure in Procedure aufrufen klappt nicht
ja mit ANZ kommt eine 1 im Label aber es sind 2 mal "Test" im text
|
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; |
AW: Procedure in Procedure aufrufen klappt nicht
Damit scheint es jetzt richtig zu sein
|
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..... |
AW: Procedure in Procedure aufrufen klappt nicht
Zitat:
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:
PS: Wie bei vielen Events bekommt man das "richtige" Objekt als Parameter (z.B. oftmals das "Sender") mit rein.
procedure TForm1.Pg3ausgabeExit(Sender: TObject);
begin Dbf2Bestand.Filtered:=false; Dbf2Bestand.Filtered:=true; end;
Delphi-Quellcode:
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.
procedure TForm1.Dbf2BestandFilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin Accept := DataSet.FieldByName('ORT').AsString = 'LAGER'; end; |
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:
Für P3 muss es so aussehen :
Accept := Dbf2Bestand.FieldByName('SCHUBLADE').AsString = 'BE';
Code:
Wie krieg ich das alles in einen Topf ???
Accept := Dbf2Bestand.FieldByName('SCHUBLADE').AsString = 'RAUS';
:roll: Danke fürs nachdenken............. |
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. |
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. |
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. |
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