Tach zusammen!
Kurze und vielleicht auch blöde Frage:
SysDirRead gibt 1/0 zurück wenn weitere Verzeichniseinträge vorhanden/nicht vorhanden sind.
Wenn ich gerade eben den letzten Eintrag gelesen habe, liefert die Funtion ne 1 oder ne Null?
Für mich steht also die Frage nach ner while- oder nach ner repeat-Schleife im Raum
Hi
Eine 1 wenn noch weitere Einträge vorhanden sind.
Sieht z.B. so aus:
( -------------------------------------------------------------------- )
i: INT := 0; dwDirHandle: DWORD; strTemp: STRING; strExt: STRING; strDirEntry: ARRAY[1..100] OF STRING;
dwDirHandle := SysDirOpen(strPath);
FOR i:=1 TO 100 BY 1 DO
strDirEntry[i] := '';
END_FOR
i := 0;
WHILE SysDirRead(hDir:=dwDirHandle,strTemp,0) <> 0 DO
strExt := RIGHT(strTemp,4); IF strExt = '.txt' THEN (* File Extension Filterung *) i := i+1; strDirEntry[i] := strTemp; END_IF
END_WHILE
Gruss
Erik
Ich nochmal!
Anscheinend liefert die Funktion ne Null, wenn sie den letzten Eintrag gelesen hat und kein weiterer Eintrag im Verzeichnis ist.
Also läßt sich diese Funktionalität nur mit ner Repeat-Schleife ausführen.
Was gibt denn die Funktion zurück und was übergibt sie mir als Eintrag, wenn ich sie beim ersten Leseversuch keinen Eintrag findet?
Ich kanns schlecht testen, darum frag ich so unbeholfen
Hallo
Also die Funktion liefert eine 1 wenn ein Eintrag vorhanden war.
Ich hab das trotzdem (oder grade drum) mit einer WHILE Schleife gemacht...
Wenn beim 1. Versuch kein Eintrag gefunden wird gibts eben gleich eine NULL.
Hast du keine RTE auf deinem PC installiert ?
Ist bei der Standard Installation von CoDeSys dabei.
Da kannst du sowas ganz einfach testen.
Gruss Erik
Hallo Erik,
bis jetzt hatte ich nen Motion Controller dran hängen, den ich heute grad nicht da hab, deshalb meine Hilflosigkeit! Ich werds mal mit RTE versuchen.
Ich hab gestern die Routine im Debug-Modus getestet, da hätte ich schwören können, dass mir der folgende Loop
while SysDirRead(dwHandle, strDirEntry, pDirInfo)<>0 do
(mache irgendwas mit dieser Datei)
end_while
immer die letzte Datei unterschlagen hat.
Isses vielleicht nicht so glücklich, den Funktionsaufruf direkt in die while-Bedingung einzuarbeiten?
Funktionsaufruf direkt in der While Bedingung sollte kein Problem sein.
Ich mach das ja genau so, allerdings auf der RTE.
Und ich weiss 100%ig das da alle Einträge eingelesen werden.
Wäre natürlich denkbar, das in der SysLib deines Herstellers ein Fehlerchen drin wäre.
Aber probiers lieber vorher noch mal, bevor du dich beschwerst
Log in to post a comment.
Tach zusammen!
Kurze und vielleicht auch blöde Frage:
SysDirRead gibt 1/0 zurück wenn weitere Verzeichniseinträge vorhanden/nicht vorhanden sind.
Wenn ich gerade eben den letzten Eintrag gelesen habe, liefert die Funtion ne 1 oder ne Null?
Für mich steht also die Frage nach ner while- oder nach ner repeat-Schleife im Raum
Hi
Eine 1 wenn noch weitere Einträge vorhanden sind.
Sieht z.B. so aus:
( -------------------------------------------------------------------- )
( -------------------------------------------------------------------- )
dwDirHandle := SysDirOpen(strPath);
FOR i:=1 TO 100 BY 1 DO
END_FOR
i := 0;
WHILE SysDirRead(hDir:=dwDirHandle,strTemp,0) <> 0 DO
END_WHILE
Gruss
Erik
Ich nochmal!
Anscheinend liefert die Funktion ne Null, wenn sie den letzten Eintrag gelesen hat und kein weiterer Eintrag im Verzeichnis ist.
Also läßt sich diese Funktionalität nur mit ner Repeat-Schleife ausführen.
Was gibt denn die Funktion zurück und was übergibt sie mir als Eintrag, wenn ich sie beim ersten Leseversuch keinen Eintrag findet?
Ich kanns schlecht testen, darum frag ich so unbeholfen
Hallo
Also die Funktion liefert eine 1 wenn ein Eintrag vorhanden war.
Ich hab das trotzdem (oder grade drum) mit einer WHILE Schleife gemacht...
Wenn beim 1. Versuch kein Eintrag gefunden wird gibts eben gleich eine NULL.
Hast du keine RTE auf deinem PC installiert ?
Ist bei der Standard Installation von CoDeSys dabei.
Da kannst du sowas ganz einfach testen.
Gruss Erik
Hallo Erik,
bis jetzt hatte ich nen Motion Controller dran hängen, den ich heute grad nicht da hab, deshalb meine Hilflosigkeit! Ich werds mal mit RTE versuchen.
Ich hab gestern die Routine im Debug-Modus getestet, da hätte ich schwören können, dass mir der folgende Loop
while SysDirRead(dwHandle, strDirEntry, pDirInfo)<>0 do
(mache irgendwas mit dieser Datei)
end_while
immer die letzte Datei unterschlagen hat.
Isses vielleicht nicht so glücklich, den Funktionsaufruf direkt in die while-Bedingung einzuarbeiten?
Hallo
Funktionsaufruf direkt in der While Bedingung sollte kein Problem sein.
Ich mach das ja genau so, allerdings auf der RTE.
Und ich weiss 100%ig das da alle Einträge eingelesen werden.
Wäre natürlich denkbar, das in der SysLib deines Herstellers ein Fehlerchen drin wäre.
Aber probiers lieber vorher noch mal, bevor du dich beschwerst
Gruss
Erik