Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
spawn
Anmeldungsdatum: 09.08.2005 Beiträge: 45
|
Verfasst am: 23.04.2006, 01:34 Titel: verzeichnis auslesen |
|
|
Hi,
habe folgenden Block:
Code: |
SHELL "dir/b *.txt >C:\xyz\dir.dat"
OPEN "C:\xyz\dir.dat" FOR BINARY AS #1
FOR x = 1 TO LOF(1)
GET #1, x, k
LET df = df + 1
IF df = 1499 THEN EXIT FOR
gh = INSTR(k, ent$)
x = x + gh
A(df) = LEFT$(k, gh - 1)
NEXT x
LET endlist = df
CLOSE #1
|
in euiner schleife eingegeben. später wird eine Datei aus dem ordner gelöscht und die schleife beginnt von vorne.
nur leider zeigt das prog die datei dann immernoch mit an.
weis jemand rat? ich denke, dass ich die inhalte irgendeine Feldvariable löschen muss kann das sein?
MFG Guido |
|
Nach oben |
|
 |
pinkpanther

Anmeldungsdatum: 28.05.2005 Beiträge: 79 Wohnort: Wien
|
Verfasst am: 23.04.2006, 10:50 Titel: |
|
|
Hallo Guido,
ganz klar ist mir nicht, welches Ziel dein Programm verfolgt. Ich nehme mal an, du möchtest die Namen aller Textdateien eines bestimmten Verzeichnisses in eine Feldvariable lesen und die benutzte Hilfsdatei anschließend löschen.
Dein Programmansatz ist ziemlich buggy, vor allem fällt mir aber auf, dass du einen für die Aufgabe unpassenden Dateimodus verwendest. Wenn du die Ausgabe von DIR in eine Textdatei umlenkst, erhältst du eine Datei mit mehreren, durch CR/LF getrennten Zeilen. Um diese Zeilen einzulesen, eignen sich am besten FOR INPUT als Dateimodus und LINE INPUT als Lesebefehl. LINE INPUT liest automatisch alle Zeichen bis zum nächsten CR/LF-Paar aus und tut dies effizienter, als wenn man diese Funktion von Hand nachbaut. Eine gute Lösung könnte so aussehen:
Code: | DEFINT A-Z
CONST MaxDateien% = 499
DIM DirZeile$(1 TO MaxDateien%)
tHilfsDatei$ = "C:\xyzdir.dat"
SHELL "dir/b *.txt > " + tHilfsDatei$
OPEN tHilfsDatei$ FOR INPUT AS #1
Zaehler = 0
ERASE DirZeile$
DO UNTIL EOF(1) OR (Zaehler = MaxDateien%)
Zaehler = Zaehler + 1
LINE INPUT #1, DirZeile$(Zaehler)
LOOP
CLOSE #1
KILL tHilfsDatei$ |
Einen schönen Sonntag noch! _________________ lG
pinkpanther  |
|
Nach oben |
|
 |
spawn
Anmeldungsdatum: 09.08.2005 Beiträge: 45
|
Verfasst am: 23.04.2006, 12:09 Titel: |
|
|
also, das prog. liest sämtliche txt´s eines verzeichnisses aus, speichert sie in dir.dat und öffnet diese um den inhalt - also alle txt´s im ordner - in eine feldvariable zu schreiben, damit ich sie ausgeben kann.
Das ganze ist am anfang einer schleife. später kann man die txt´s dann öffnen oder löschen und danach beginnt die schleife von vorne um evtl andere dateien zu löschen/öffnen.
mein problem ist nun, dass wenn eine datei gelöscht wurde und die schleife von vorne beginnt die gelöschte datei immernoch ausgegeben wird.
das die schleife befindet sich in einem UP. wenn ich das UP verlasse und wieder starte wird die Datei nichtmehr angezeigt. |
|
Nach oben |
|
 |
Gremlin

Anmeldungsdatum: 12.12.2004 Beiträge: 142 Wohnort: Heinsberg
|
Verfasst am: 23.04.2006, 14:09 Titel: |
|
|
Hallo Guido,
so, wie ich das sehe, liegt das alles daran, das du die DO:LOOP-SChleife innerhalb des Datei Öffnens stehen hast...
So wird ja nur einmal die Liste der Dateien erstellt, aber nie verändert.
Ich würde das dann auch so ein bisschen ereignisgesteuert machen, also nicht, dass immer und immer wieder eine neue Lsite erstellt wird, sondern nur, wenn der User auch was gelöscht hat.
Also nehmen wir mal an, dass man eine Datei markieren und mit "d" löschen könnte, dann würde ich sowas versuchen:
Code: | Eingabe$ = INKEY$
DO
IF Eingabe$ <> "" THEN
' *** Das wird nur ausgeführt, wenn auch was gedrückt wurde.
SELECT CASE Eingabe$
CASE "d"
EREASE MarkierteDatei$
SHELL "DIR /B > " + tHilfsDatei$
OPEN tHilfsDatei$ FOR INPUT AS #1
DO UNTIL EOF(1) OR (Zaehler = MaxDateien%)
Zaehler = Zaehler + 1
LINE INPUT #1, DirZeile$(Zaehler)
LOOP
CLOSE #1
CASE CHR$(27)
END 'Abbruch mit ESC
END SELECT
END IF
LOOP |
So würde dann (hoffentlich ) immer eine neue Liste erstellt, wenn etwas mit "d" gelöscht würde. _________________ Tja, hier konnte ihre Werbung stehen.
Pech gehabt.  |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 23.04.2006, 15:45 Titel: |
|
|
pinkpanther hat Folgendes geschrieben: | Code: | tHilfsDatei$ = "C:\xyzdir.dat" |
|
Kleine Verbesserung:
Code: | tHilfsDatei$ = ENVIRON$("TEMP") + "xyzdir.dat" |
d.h. C: muss nicht notwendigerweise überall vorhanden sein (z.B. bei mir ist %systemDrive% das E:) und ferner hat der Windows-Benutzer gar keine Schreibbereichtigung aufs Wurzelverzeichnis. Dagegen bei %TEMP% ist dies immer möglich. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Gremlin

Anmeldungsdatum: 12.12.2004 Beiträge: 142 Wohnort: Heinsberg
|
Verfasst am: 23.04.2006, 15:50 Titel: |
|
|
Oh, ich habe mich da verschrieben...
Das
muss natürlich mit in die Schleife! _________________ Tja, hier konnte ihre Werbung stehen.
Pech gehabt.  |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 23.04.2006, 16:03 Titel: |
|
|
Dann benutze doch den Edit-Button
@dreael: Auf manchen Rechner geht TEMP auch nicht, dort heißt es dann z.B. Temp, TMP oder Tmp...
jb _________________ Elektronik und Programmieren |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 23.04.2006, 19:04 Titel: |
|
|
Von mir gemachte Erfahrung: %TEMP% gibt es eigentlich schon sein MS-DOS 6.22 (und wahrscheinlich noch etwas früher) überall. Das Ganze bezieht sich wohl verstanden auf eine "Out of the box"-DOS/Windows-Installation, d.h. wird überall von der Installationsroutine vordefiniert.
"Out of the box"=ich nehme die MS-DOS-Disketten bzw. Windows-Installations-CD frisch aus dem Laufwerk heraus und fahre das soeben installierte Betriebssystem das erste Mal hoch, d.h. habe noch keine einzige Konfigurationseinstellung von Hand angefasst.
Ansonsten weiterführender Artikel zum Thema:
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/EinbettungBSY.html _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
spawn
Anmeldungsdatum: 09.08.2005 Beiträge: 45
|
Verfasst am: 23.04.2006, 19:20 Titel: |
|
|
was bedeuten diese zeilen:
Code: |
GET #1, x, k
gh = INSTR(k, ent$)
|
also get 1# is ja klar aber was wird in x und k geschrieben? |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 23.04.2006, 19:26 Titel: |
|
|
In x wird nichts geschrieben, x ist in diesem Falle die Position in der Datei.
jb _________________ Elektronik und Programmieren |
|
Nach oben |
|
 |
spawn
Anmeldungsdatum: 09.08.2005 Beiträge: 45
|
Verfasst am: 23.04.2006, 21:18 Titel: |
|
|
ok - jetzt hab ichs.
ich habe noch ein paar variablen vor dem laden wieder auf 0 bzw "" gesetzt.
ich denke, dass er ohne dies am ende der datei weitergelesen hat und dann nichts mehr gefunden hat.
trotzdem Danke für Eure Bemühungen
Guido |
|
Nach oben |
|
 |
pinkpanther

Anmeldungsdatum: 28.05.2005 Beiträge: 79 Wohnort: Wien
|
Verfasst am: 24.04.2006, 20:18 Titel: |
|
|
@dreael
Zitat: | Kleine Verbesserung:
Code:
tHilfsDatei$ = ENVIRON$("TEMP") + "xyzdir.dat" |
Grundsätzlich hast du Recht. Ich habe allerdings spawns (Pfad-)Vorgabe bewusst nicht abgeändert.
Ich darf mich hoffentlich mit einer kleinen Verbesserung der Verbesserung revanchieren: Nach
Code: | tHilfsDatei$ = ENVIRON$("TEMP") + "xyzdir.dat" |
enthält tHilfsDatei$ auf meinem PC:
Code: | C:\DOKUME~1\USER\LOKALE~1\Tempxyzdir.dat |
daher besser:
Code: | tHilfsDatei$ = ENVIRON$("TEMP") + "\xyzdir.dat" |  _________________ lG
pinkpanther  |
|
Nach oben |
|
 |
Gremlin

Anmeldungsdatum: 12.12.2004 Beiträge: 142 Wohnort: Heinsberg
|
Verfasst am: 24.04.2006, 20:27 Titel: |
|
|
Oder noch besser per Abfrage
Code: | IF RIGHT$(ENVIRON$("TEMP"), 1) = "\" THEN
tHilfsDatei$ = ENVIRON$("TEMP") + "xyzdir.dat"
ELSE
tHilfsDatei$ = ENVIRON$("TEMP") + "\xyzdir.dat"
END IF |
Mal so vom Prinzip her, so sind jedenfalls alle Fälle abgedeckt.  _________________ Tja, hier konnte ihre Werbung stehen.
Pech gehabt.  |
|
Nach oben |
|
 |
|