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:

DIR$ ist noch nicht ganz klar

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



Anmeldungsdatum: 16.09.2004
Beiträge: 103

BeitragVerfasst am: 20.08.2005, 16:37    Titel: DIR$ ist noch nicht ganz klar Antworten mit Zitat

Hi ich wollte gerade ein Programm erstellen in dem ich den DIR$ befehl einbauen möchte, aber dieser ist mir noch nicht ganz klar.
Hab auch schon in die Referenz geschaut.

Ich möchte in einer Schleife auf Tastendruck nacheinander alle Dateien im Verzeichnis C:\fb anzeigen lassen,also bei tastendruck die nächste Datei (Alphabetisch natürlich)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 20.08.2005, 16:46    Titel: Antworten mit Zitat

Hallo.

dir$ listet die Dateien und ordener im Aktuellen Verzeichniss auf. Das heißt, exe datei ist in C:\meineprogramme\ dann kannst du nur den inhalt von meineprogramme zeigen. Du kannst sowas(wenn du unter windows programmierst) mit der eingabeaufforderung lösen. In der QBMONFAQ müsste dazu ein Beispiel sein, wie das geht.

Mfg
Michael

EDIT: habs mal rausgesucht. GEh unter Windows mal unter hilfe und such nach "dir". Da findest du weitere Parameter.
Code:

'DIR_2.BAS
'==========
'Anzeige des Inhalts eines Verzeichnisses mit Hilfe
'des Befehls SHELL "DIR.."
'Das Programm liest die Dateinamen ein, speichert
'sie dabei mit Hilfe einer Ausgabeumleitung und gibt
'sie auf dem Bildschirm aus.
'Achtung! Ss werden die Ordner wie Dateien angezeigt.
'Von CarlT (CarlT@gmx.net), 15.9.02
'=====================================================
DEFINT A-Z
CLS
DIM k AS STRING * 80 'String um das einlesen zu begrenzen
DIM a(1499) AS STRING 'Feld um die dateinamen zu speichern
ent$ = CHR$(13)
'
SHELL "dir/b *.* >datei.dat" 'Schreiben der Datei
OPEN "datei.dat" FOR BINARY AS #1 '™ffne die datei in bin„r-modus
'
FOR x = 1 TO LOF(1) ' von 1 bis Ende der datei
GET #1, x, k 'Einlesen
df = df + 1 'Z„hlen der Dateien
IF df > 1499 THEN EXIT FOR 'Verhindert ?berlauf
gh = INSTR(k, ent$) 'Stellt punkt des Zeilenumbruchs fest
x = x + gh 'positioniert den Datei-Positionszeiger neu ein
a(df) = LEFT$(k, gh - 1) 'extrahiert den Dateinamen und speichert ihn
NEXT x
'
PRINT "Fertig! Druecken sie irgendeine Taste": SLEEP
df = 0 'Z„hler zur?cksetzen
DO
df = df + 1 'Z„hlen
fg$ = a(df) 'zuweisen des gespeicherten Namens
PRINT fg$ 'Ausdrucken dieses Namens
LOOP WHILE fg$ <> "" 'Kontrolliert ob alle aufgerufen wurden
END

_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 20.08.2005, 16:56    Titel: Antworten mit Zitat

wenn du in den Code der Referenz ein einfaches Sleep einfügst hast dus doch schon:
Code:
CONST attrib_readonly = 1
CONST attrib_hidden = 2
CONST attrib_system = 4
CONST attrib_directory = 16
CONST attrib_archive = 32

DECLARE SUB list_files (filespec$, attrib)

SUB list_files (filespec$, attrib)
   DIM filename AS STRING

   filename = DIR$(filespec$, attrib)
   DO
      PRINT SPACE$(4); filename
      filename = DIR$("", attrib)
   LOOP WHILE filename &lt;&gt; ""
END SUB

PRINT "directories:"
list_files "*", attrib_directory

PRINT "archive files:"
list_files "*", attrib_archive

_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
surfer87



Anmeldungsdatum: 16.09.2004
Beiträge: 103

BeitragVerfasst am: 20.08.2005, 17:16    Titel: Antworten mit Zitat

ja schon, aber mir ist noch nicht ganz das Prinzip klar wie das Prog in der Referenz genau arbeitet, wegen der Variablen hinter den SUB's. Hab das auch noch nie so gebraucht und folglich nie gelernt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
d.j.peters
Gast





BeitragVerfasst am: 20.08.2005, 19:53    Titel: Antworten mit Zitat

Hallo Surfer,
hier ist ein Beispiel welches nur Datein anzeigt also keine Verzeichnisse.
Nach dem eine Liste erstellt wurde wird sie nach den Anfangsbuchstaben sotiert.
Am Ende werden dir Namen einzeln nach Tastendrücke ausgegeben.

!Ich Benutze kein WINDOWS aber chdir "c:\fb" müsste gehen!


Wenn Du Hilfe brauchst um ALLE Dateien in ALLEN Unterverzeichnissen zu sotieren dann poste noch mal.

Grüsse
Joshy

Code:
option explicit
dim entry as string
redim entrys(0) as string
dim as integer counter,flag,i

'wechsle in das zu lesende verzeichnis
'chdir "/c/fb" 'LINUX
chdir "c:\fb" 'WINDOWS

entry=dir$("*",255-16) 'lese alle dateien nur keine weiteren verzeichnisse

while entry$<>"" 'schleife ueber alle dateien
  counter+=1
  redim preserve entrys(counter-1) as string 'array um einen eintrag vergroessern
  entrys$(counter-1)=entry$ 'dateinamen in array speichern
  entry$=dir$("")
wend

'wenn keine datei im verzeichniss dann ende
if counter = 0 then  print "Keine Dateien im Verzeichniss!":end

'wenn mehr als eine datei dann sotiere nach anfangsbuchstaben
if counter>1 then
  flag=1
  while flag=1 'sotiere so lange die reihenfolge nicht stimmt
    flag=0
    for i=0 to counter-2
      'ist der ascicode von (a)>(a+1) dann tauschen
      if asc(left$(entrys$(i),1))>asc(left$(entrys$(i+1),1)) then
        swap entrys$(i),entrys$(i+1) 'tauschen
        flag=1:exit for 'und von vorne beginnen
      end if
    next
  wend
end if

'gebe sotierte liste nach einzelnen tastendruecken aus
for i=0 to counter-1
  print entrys$(i)
  sleep
next

end
Nach oben
surfer87



Anmeldungsdatum: 16.09.2004
Beiträge: 103

BeitragVerfasst am: 20.08.2005, 20:10    Titel: Antworten mit Zitat

Hm vllt hilfts dir wenn ich den Zweck nenne:
Ich bräuchte das für einen simplen MP3 Player (Routine hab ich hier aus dem Forum). Da soll das Prog je nach Verzeichnis erstmal alle Datien anzeigen (meinetwegen auch gefiltert wegen *.mp3)

/edit:

Scheint aber dafür geeignet die Methode. Thx
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
d.j.peters
Gast





BeitragVerfasst am: 20.08.2005, 20:26    Titel: Antworten mit Zitat

surfer87 hat Folgendes geschrieben:
...Ich bräuchte das für einen simplen MP3 Player (Routine hab ich hier aus dem Forum). Da soll das Prog je nach Verzeichnis erstmal alle Datien anzeigen (meinetwegen auch gefiltert wegen *.mp3)

Code:
entry=dir$("*.mp3",255-16)


Grüsse Joshy
Nach oben
surfer87



Anmeldungsdatum: 16.09.2004
Beiträge: 103

BeitragVerfasst am: 20.08.2005, 21:08    Titel: Antworten mit Zitat

Nach welchem Schema werden die Dateien denn vor dem Ordnen ausgegeben bzw. nach welchen Kriterien?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
d.j.peters
Gast





BeitragVerfasst am: 20.08.2005, 22:59    Titel: Antworten mit Zitat

surfer87 hat Folgendes geschrieben:
Nach welchem Schema werden die Dateien denn vor dem Ordnen ausgegeben bzw. nach welchen Kriterien?

Dokumentiere die Sotierung aus mit #if 0 und #endif
Code:
#if 0
if counter>1 then
  flag=1
  while flag=1 'sotiere so lange die reihenfolge nicht stimmt
    flag=0
    for i=0 to counter-2
      'ist deer ascicode von (a)>(a+1) dann tauschen
      if asc(left$(entrys$(i),1))>asc(left$(entrys$(i+1),1)) then
        swap entrys$(i),entrys$(i+1) 'tauschen
        flag=1:exit for 'und von vorne beginnen
      end if
    next
  wend
end if
#endif

Dann wird die original Reihenfolge ausgegeben.
Also unter Linux so wie sie gespeichert sind (nicht nach type,Datum,größe etc.) sondern erst die versteckten Dateien gemischt mit Verzeichnissen die mit einem Großbuchstabe beginnen dann alle Dateien mit die mit Kleinbuchstaben beginnen gemischt mit Verzeichnissen. Kann sein das Windows nicht zwischen Groß- und Kleinschreibung unterscheidet.

Grüsse Joshy
Nach oben
surfer87



Anmeldungsdatum: 16.09.2004
Beiträge: 103

BeitragVerfasst am: 21.08.2005, 00:04    Titel: Antworten mit Zitat

hm sehr komisch die Reihenfolge.
Weiß jemand wie in Windows die Dateien angeordnet sind? (Auf diesen Fall bezogen, ist bei manchen anderen Progs auch so)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 22.08.2005, 10:41    Titel: Antworten mit Zitat

surfer87 hat Folgendes geschrieben:
ja schon, aber mir ist noch nicht ganz das Prinzip klar wie das Prog in der Referenz genau arbeitet, wegen der Variablen hinter den SUB's. Hab das auch noch nie so gebraucht und folglich nie gelernt.


In dem Fall solltest du dir das Kapitel über Prozeduren auf freebasic.de ansehen, besonders "Parameterübergabe".

Einleitung
SUBs
FUNCTIONs
Parameterübergabe
GOTO und GOSUB

Könnte dir helfen.
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht 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 FreeBASIC. 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