Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

verzeichnis auslesen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
spawn



Anmeldungsdatum: 09.08.2005
Beiträge: 45

BeitragVerfasst am: 23.04.2006, 01:34    Titel: verzeichnis auslesen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
pinkpanther



Anmeldungsdatum: 28.05.2005
Beiträge: 79
Wohnort: Wien

BeitragVerfasst am: 23.04.2006, 10:50    Titel: Antworten mit Zitat

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 lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
spawn



Anmeldungsdatum: 09.08.2005
Beiträge: 45

BeitragVerfasst am: 23.04.2006, 12:09    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Gremlin



Anmeldungsdatum: 12.12.2004
Beiträge: 142
Wohnort: Heinsberg

BeitragVerfasst am: 23.04.2006, 14:09    Titel: Antworten mit Zitat

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 happy ) immer eine neue Liste erstellt, wenn etwas mit "d" gelöscht würde.
_________________
Tja, hier konnte ihre Werbung stehen.
Pech gehabt. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 23.04.2006, 15:45    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Gremlin



Anmeldungsdatum: 12.12.2004
Beiträge: 142
Wohnort: Heinsberg

BeitragVerfasst am: 23.04.2006, 15:50    Titel: Antworten mit Zitat

Oh, ich habe mich da verschrieben...

Das
Code:
Eingabe$ = INKEY$

muss natürlich mit in die Schleife!
_________________
Tja, hier konnte ihre Werbung stehen.
Pech gehabt. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 23.04.2006, 16:03    Titel: Antworten mit Zitat

Dann benutze doch den Edit-Button zwinkern

@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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 23.04.2006, 19:04    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
spawn



Anmeldungsdatum: 09.08.2005
Beiträge: 45

BeitragVerfasst am: 23.04.2006, 19:20    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 23.04.2006, 19:26    Titel: Antworten mit Zitat

In x wird nichts geschrieben, x ist in diesem Falle die Position in der Datei.

jb
_________________
Elektronik und Programmieren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
spawn



Anmeldungsdatum: 09.08.2005
Beiträge: 45

BeitragVerfasst am: 23.04.2006, 21:18    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
pinkpanther



Anmeldungsdatum: 28.05.2005
Beiträge: 79
Wohnort: Wien

BeitragVerfasst am: 24.04.2006, 20:18    Titel: Antworten mit Zitat

@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"
happy
_________________
lG
pinkpanther lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Gremlin



Anmeldungsdatum: 12.12.2004
Beiträge: 142
Wohnort: Heinsberg

BeitragVerfasst am: 24.04.2006, 20:27    Titel: Antworten mit Zitat

Oder noch besser per Abfrage zwinkern

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. zwinkern
_________________
Tja, hier konnte ihre Werbung stehen.
Pech gehabt. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz