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:

Eigenschaften der Ausgabe von DIR

 
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
Gremlin



Anmeldungsdatum: 12.12.2004
Beiträge: 142
Wohnort: Heinsberg

BeitragVerfasst am: 22.04.2006, 13:30    Titel: Eigenschaften der Ausgabe von DIR Antworten mit Zitat

Hallo,
man soll ja nicht mehrere verschiedene Probleme in einem Thread abhandeln... zwinkern

Ich möchte noch fragen, inwiefern ich mich auf die Ausgabe, die DIR bei meinem System liefert, verlassen kann.

Genauer:
Ich schreibe das Ergebnis des SHELL-Befehls Dir in eine Datei, die dann in einer anderen Sub durchgegangen wird.
Code:
SHELL "DIR /OGN >> LIST.TXT"

So, daraus sollen jetzt alle Ordner gefiltert werden, daher auch die ausführliche Ansicht.
Hier mal der Beginn der Datei, wie sie also aussieht:
Code:

 Datenträger in Laufwerk C: HARDDISK   
 Seriennummer des Datenträgers: ****-****
 Verzeichnis von C:\qb4.5

.              <DIR>        13.04.04  15:19 .
..             <DIR>        13.04.04  15:19 ..
3DDMORPH       <DIR>        01.05.04  12:00 3ddmorph
3DDS           <DIR>        01.05.04  12:00 3dds
ADOK           <DIR>        18.04.04  16:09 adok
ANDERE         <DIR>        14.04.04  11:49 andere
[...]
WETTBE~1       <DIR>        05.02.05  22:14 Wettbewerbe
ZIELQ          <DIR>        15.12.04  19:34 Zielq
12423    TXT             0  05.06.04  22:28 12423.TXT
2134                     0  05.06.04  22:28 2134
241      TXT             0  07.08.04  18:25 241.TXT
[...]

Da habe ich mir gedacht:
Die ersten 7 Zeilen sind Ausschuss, die kann ich immer wieder in dieselbe Variable einlesen. Ab dann muss ich darauf achten, ob am 16. Zeichen der String "<DIR>" auftaucht und danach die Auswertung beenden.

Schön und gut...aber kann ich mich auch darauf verlassen?
Es könnte ja sein, dass bei älteren DOS-Versionen ein anderer Header der Ausgabe vorliegt und ich dann so ein falsches Ergebnis habe...
_________________
Tja, hier konnte ihre Werbung stehen.
Pech gehabt. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 22.04.2006, 14:18    Titel: Antworten mit Zitat

Bei mir sieht DIR /OGN eh ganz anders aus:

Code:
C:\>dir /OGN
 Datenträger in Laufwerk C: ist WINDOWS
 Datenträgernummer: E824-4A49

 Verzeichnis von C:\

06.09.2004  15:47       <DIR>          alt
28.12.2004  22:35       <DIR>          Blue Byte
20.12.2004  17:23       <DIR>          Borland
24.10.2004  11:35       <DIR>          brother2k
07.12.2005  13:56       <DIR>          cargu
25.02.2006  14:25       <DIR>          cquiz15
17.07.2005  19:00       <DIR>          ddk
05.03.2006  12:05       <DIR>          Desktop-Alarm
01.12.2005  18:31       <DIR>          Dev-Cpp
19.02.2006  16:15       <DIR>          Dokumente und Einstellungen
03.04.2005  16:41       <DIR>          ELSA
20.04.2006  13:32       <DIR>          FreeBASIC
24.08.2004  16:20       <DIR>          NVIDIA Display Driver
24.08.2004  16:47       <DIR>          Program Files
09.04.2006  22:27       <DIR>          Programme
22.04.2006  12:19       <DIR>          WINNT
13.11.2005  20:48       <DIR>          zonenmädchen_data
02.02.2006  11:57              176.895 2006_02_104.pdf
30.03.2006  21:36              129.526 2059213_01[1].wma
21.04.2006  16:30              108.364 HPIM0220.jpg
10.04.2006  16:28              437.942 IE4Info.bmp
10.04.2006  16:27              867.654 IE4Quark.bmp
19.04.2006  23:23              819.785 ISO1_DVD.nri
19.04.2006  22:59               10.039 Log.txt
19.04.2006  23:22               11.477 Log2.txt
11.03.2006  18:22               19.495 Office2000EasterEgg.png
30.03.2006  21:48                  154 preview.m3u
31.05.2005  19:32                    4 spath.ini
30.03.2006  15:48                   66 zeit.bat
[...]
              28 Datei(en)     23.895.657 Bytes
             102 Verzeichnis(se),  10.274.766.848 Bytes frei

C:\>_


System ist W2k.
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 22.04.2006, 14:38    Titel: Antworten mit Zitat

WinXP ist ganz ähnlich:
Code:
C:\>dir /OGN
 Datenträger in Laufwerk C: ist Lokaler Datenträger
 Volumeseriennummer: 1C09-4E64

 Verzeichnis von C:\

25.01.2006  21:33    <DIR>          Backup
01.09.2005  14:17    <DIR>          CLICTOPF
02.01.2006  09:57    <DIR>          conv
19.02.2005  17:16    <DIR>          DESIGNER
13.02.2005  18:20    <DIR>          Dokumente und Einstellungen
[...]
19.04.2006  11:52    <DIR>          WINDOWS
01.08.2004  16:49    <DIR>          WUTemp
24.08.2004  18:15                94 BIOSVIEW.INI
07.04.2006  12:32               115 DownloadLog.txt
24.04.2005  13:58            65'533 MZ
09.05.2004  13:37             3'239 TEMP.DIR
17.03.2006  20:41           360'054 test.bmp
               5 Datei(en)        429'035 Bytes
              31 Verzeichnis(se),  7'681'568'768 Bytes frei

C:\>

Würde mich nicht wundern, wenn das auch noch Sprachabhängig ist.

Du betonst aber, das es um dein System geht.
Ich vermute das dein Windows das ganze immer gleich Formatiert, sonst: Probieren geht überstudieren zwinkern
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: 22.04.2006, 14:58    Titel: Antworten mit Zitat

Hm, ich habe es jetzt doch auf DIR /OGN /B umgestellt.

Dann muss ich halt akzeptieren, dass man den Ordner nicht "Haha.bla" nennen kann, was ja unter Windows möglich ist zwinkern

So können im Ordnernamen wenigstens auch Leerstellen vorkommen, und Punkte, solange nicht genau 3 Zeichen danach kommen, reicht im Grunde für mein Vorhaben.
Danke für die Bestätigung, dass ich nicht umsonst umgestellt habe. happy
_________________
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: 22.04.2006, 16:53    Titel: Antworten mit Zitat

Gremlin hat Folgendes geschrieben:
Dann muss ich halt akzeptieren, dass man den Ordner nicht "Haha.bla" nennen kann, was ja unter Windows möglich ist zwinkern

Diesen Fall könntest du aber auch abfangen, indem du erst mit DIR /AD /B die Ordner ausliest, und dann erst die Dateien...

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



Anmeldungsdatum: 12.12.2004
Beiträge: 142
Wohnort: Heinsberg

BeitragVerfasst am: 22.04.2006, 17:48    Titel: Antworten mit Zitat

Das habe ich ja eh schon.
Code:
DIR /OGN /B

macht nichts anderes als alphabetisch und mit Verzeichnissen zuerst geordnet (OGN) und im einfachen Modus zu listen (B).

Andererseits könnte dann ja auch jemand den Ordner unbedingt "zzzz.zzz" nennen wollen, was dann? zwinkern
Ich schreibe dann halt in die Readme, dass man keine Punkte benutzen darf.

Denn bei meinem Projekt ist es so, dass es gar nicht wirklich auf "irgendwelche" Ordner ankommt, sondern auf ganz bestimmte, die dann vom User auch selber erstellt werden (können). Daher stellen sich manche Probleme nicht (wirklich).
_________________
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: 22.04.2006, 17:57    Titel: Antworten mit Zitat

Öhm verwundert, mit DIR /AD /B werden *nur* Verzeichnisse aufgelistet. Somit könntest du sie seperat laden...

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: 22.04.2006, 19:10    Titel: /B ist extra für SHELL "dir" konzipiert! Antworten mit Zitat

Für das schleifenmässige Einlesen eines Verzeichnisses auf SHELL "dir"-Basis gibt es eigentlich nur eine Option: /B => immer "/B" verwenden! Damit bekommt man nur den nackten Dateinamen, so dass
Code:
SHELL "dir " + verz$ + "/b >" + ENVIRON$("TEMP") + "~DIR.TMP"
OPEN ENVIRON$("TEMP") + "~DIR.TMP" FOR INPUT AS 1
WHILE NOT EOF(1)
  LINE INPUT#1, d$
  ' Irgend etwas beliebiges mit Datei d$ tun, z.B. OPEN d$ FOR INPUT AS 1
WEND
CLOSE 1
KILL ENVIRON$("TEMP") + "~DIR.TMP"

möglich ist und dies auch garantiert überall korrekt funktioniert.

Ohne "/B" wird der Output abhängig von den gewählten Windows-Ländereinstellungen / COUNTRY.SYS-Eintrag bei DOS, ebenso sieht der Output bei jeder DOS- und Windowsversion auch wieder anders aus und natürlich sehen DIR-Ausgaben auf einer englischen Betriebssystemversion auch wieder anders aus als auf einer deutschen. Einen DIR-Output ohne /B zu parsen ist daher entsprechend aufwändig und fehlerträchtig, dass das Programm schlussendlich nicht überall läuft => daher SHELL "dir .." immer ausnahmlos mit "/B" verwenden!

@Thomas Antoni: Bitte evtl. im Monster-FAQ ergänzen.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
pinkpanther



Anmeldungsdatum: 28.05.2005
Beiträge: 79
Wohnort: Wien

BeitragVerfasst am: 22.04.2006, 19:28    Titel: Antworten mit Zitat

Mir fielen da auch noch mindestens drei "Ich-will-auf-keinen-Fall-Call-Interrupt-benutzen" Lösungsvarianten ein, die alle ein wenig (wie man bei uns in Wien sagt) "hatschert" daherkommen (d.h. ungenau, schlampig, buggy).

Warum nicht gleich auf die (gar nicht so komplizierte) Call-Interrupt-Lösung zurückgreifen? Funktioniert unter allen Systemen, die DOS emulieren können (und unter allen DIRCMD-Einstellungen!). Enthält weder extrem viele Zeilen noch komplizierte Logik...

Code:
DEFINT A-Z

DECLARE FUNCTION OrdnerVorhanden% (rtOrdnerName$)

TYPE typRegister
  AX AS INTEGER
  BX AS INTEGER
  CX AS INTEGER
  DX AS INTEGER
  BP AS INTEGER
  SI AS INTEGER
  DI AS INTEGER
  Flags AS INTEGER
  DS AS INTEGER
  ES AS INTEGER
END TYPE
DIM SHARED uRegister AS typRegister

TYPE typDTA
  Reserviert    AS STRING * 21
  Attribut      AS STRING * 1
  DateiZeit     AS STRING * 2
  DateiDatum    AS STRING * 2
  DateiGroesse  AS LONG
  DateiName     AS STRING * 13
END TYPE
DIM SHARED uDTA AS typDTA

CLS
PRINT "PRUEFEN AUF EXISTENZ EINES ORDNERS"
PRINT
INPUT "  Geben Sie bitte Pfad/Ordnername ein: ", tOrdnerName$
PRINT
IF OrdnerVorhanden%(tOrdnerName$) THEN
  PRINT "  Ordner vorhanden!"
ELSE
  PRINT "  Ordner nicht gefunden!"
END IF
END

FUNCTION OrdnerVorhanden% (rtOrdnerName$)

  '1. Neuen DOS-Datentransferbereich einrichten
  uRegister.DX = VARPTR(uDTA)
  uRegister.DS = VARSEG(uDTA)
  uRegister.AX = &H1A00
  CALL InterruptX(&H21, uRegister, uRegister)

  '2. Suchabfrage formulieren
  tOrdnerName$ = rtOrdnerName$ + CHR$(0)  'ASCIIZ-String erzeugen
  uRegister.AX = &H4E00                   'DOS-Service "Suchen von Dateien/Ordnern"
  uRegister.CX = 16                       'Attribut-Kombination fuer Ordner
  uRegister.DX = SADD(tOrdnerName$)       'Adresse des Suchbegriffs
  'uRegister.DS = SSEG(tOrdnerName$)       'Segment des Suchbegriffs (PDS-Funktion)
  uRegister.DS = VARSEG(tOrdnerName$)    'Segment des Suchbegriffs (QB 4.5-Funktion)

  '3. Suche starten
  CALL InterruptX(&H21, uRegister, uRegister)

  '4. Suchergebnis auswerten
  IF uRegister.Flags AND 1 THEN
    OrdnerVorhanden = 0
  ELSE
    OrdnerVorhanden = -1
  END IF

END FUNCTION

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