Ich verstehe das nicht !!!

Übersicht BlitzBasic BlitzPlus

Neue Antwort erstellen

Lifetec

Betreff: Ich verstehe das nicht !!!

BeitragMi, Aug 23, 2006 14:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe dashier gefunden:
[url]
https://www.blitzforum.de/foru...f25e963d5d
[/url]

Dann habe ich den Quelltext genommen und kopiert. Aber jetzt verstehe ich nicht was die beiden mit den Komentaren meinen.

Muss das so aussehen ?

Code:

Function lese(dir$)
  Verz=ReadDir(dir$)
  Repeat
    Datei$=NextFile$(Verz)
    If Datei$="" Then Exit
    If FileType(thisFile$ = dir$ + "\"+Datei$ ) = 2 Then
      If Datei$ <> "." And Datei$ <>".." Then
        DebugLog "Ordner:" + Datei$
        lese(thisFile$ = dir$ + "\"+Datei$ )
      EndIf
    Else
      If Datei$<>".." Then
        Print "Datei:" + Datei$
      EndIf
    End If
  Forever

  Print "-Ende-"
  Print ""

  CloseDir Verz
End Function

lese("C:\")
Stop


Es funkuniert aber nicht was mache ich den falsch ??

robotx

BeitragMi, Aug 23, 2006 14:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bei mir funktioniert dein Code, wobei ich sagen muss, dass ich kein BlitzPlus habe. Aber eigentlich sollte das kein Unterschied machen.

grtz robotx
www.botbomb.robotzgames.de
www.robotzgames.de

DATIS

Betreff: Also...

BeitragMi, Aug 23, 2006 14:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie bemerkst du denn, dass es nicht funktioniert Question
Arrow Kommt eine Fehlermeldung Question
Arrow Passiert gar nichts Question

Wenn du kein "Graphics" benutzt, wird der Desktopbuffer verwendet, wenn ich mich nicht irre Exclamation
Frauen und Technik?
Männer und BHs?

Beides möglich.

Lifetec

BeitragMi, Aug 23, 2006 15:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Code funkuniert auch aber er soll nicht nur die Ordner von C:\ angeben sondern auch die Unterordner und von den Wieder Die Dateien und Unterordnern.

Wie mach ich das ?

DATIS

BeitragMi, Aug 23, 2006 15:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Das musst du in einer Repeatschleife machen.
Gibt es da nirgendwo Beispiele?

Also du überprüfst immer weiter (mit NextFile oderso und mit Filetype), ob die Datei gerade ein Ordner ist oder eine datei. Und wenn es ein Ordner ist (FileType=2), dann benutze einfach ChangeDir (richtig?!?) um in den Ordner zu wechseln.
Frauen und Technik?
Männer und BHs?

Beides möglich.

Lifetec

BeitragMi, Aug 23, 2006 15:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mal was neues Probiert:




Code:

OrdnerNr = ReadDir("C:")
pfad$ = "C:"
Repeat
 A$ = NextFile(OrdnerNR)
 If A$ <> "" Then
  If FileType(pfad$ + "\" + A$) = 1 Then
   Print "Datei:  " + A$
  EndIf
  If FileType(pfad$ + "\" + A$) = 2 Then
   Print "Ordner: " + A$
    OrdnerNr2 = ReadDir(pfad$ + "\" + A$)
    Repeat
     B$ = NextFile(OrdnerNr2)
     If B$ <> "" Then
      If FileType(pfad$ + "\" + A$ +"\" + B$) = 1 Then
       Print "Datei2:  " + B$
      EndIf
      If FileType(pfad$ + "\" + A$ +"\" + B$) = 2 Then
       Print "Ordner2:  " + B$
       OrdnerNr3 = ReadDir(pfad$ + "\" + A$ + "\" + B$);
       Repeat;
        C$ = NextFile(OrdnerNr3)
        If C$ <> "" Then
         If FileType(pfad$ + "\" + A$ +"\" + B$) = 1 Then
          Print "Datei3:  " + C$
         EndIf
         If FileType(pfad$ + "\" + A$ +"\" + B$) = 2 Then
          Print "Ordner3:  " + C$
         EndIf
         OrdnerNr4 = ReadDir(pfad$ + "\" + A$ + "\" + B$ + "\" + C$)
        EndIf
       Until C$ = ""   
      EndIf
     EndIf
    Until B$ = ""
  EndIf
 EndIf
Until A$ = ""
WaitKey


Aber es funkuniert nicht richtig weil er nur 3 nterordner öffnet.
Und es ist ziemlich umständlich.

Weiß jemand eine Bessere Lösung ??
Es wäre nett wenn ihr mir einen Quellcode geben würdet.
 

Dreamora

BeitragMi, Aug 23, 2006 16:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Das geht sehr viel Einfacher und ohne eine Million verschachtelte Schleifen.

- Wähle einen Ordner
- Lies alle Unterordner und Dateien darin aus
- Rufe rekursiv die Funktion für jeden Unterordner auf

Wenn man das auf Laufwerkebene startet hat man theoretisch alles
Wie gesagt, das Zauberwort ist rekursiver Aufruf.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Lifetec

BeitragMi, Aug 23, 2006 16:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
Das geht sehr viel Einfacher und ohne eine Million verschachtelte Schleifen.

- Wähle einen Ordner
- Lies alle Unterordner und Dateien darin aus
- Rufe rekursiv die Funktion für jeden Unterordner auf

Wenn man das auf Laufwerkebene startet hat man theoretisch alles
Wie gesagt, das Zauberwort ist rekursiver Aufruf.


Was ist denn rekursiv. Ich verstehe das nicht kann du mir das an einen Bsp zeigen ????

SoNenTyp

BeitragMi, Aug 23, 2006 16:17
Antworten mit Zitat
Benutzer-Profile anzeigen
PseudoCode:


Code:


Function Auslesen(Verzeichnis$)

while DateieninVerzeichnis$

NaechsteDatei=Dateiauslesen(Verzeichnis)
Wenn NaechsteDatei=EinOrdner Dann

Auslesen(NaechsteDatei)

endeWenn


wend

end function

Gruss Der Typ.

User posted image
 

Dreamora

BeitragMi, Aug 23, 2006 16:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Das berühmteste Beispiel ist die Berechnung von Fakultät:

10! = 10*9*8*7*6*..*2*1

In Programmcode schreibt man die Fakultät dann Rekursiv da sie wie man oben sieht einen rekursiven Aufbau hat (sie ruft sich immer selbst wieder auf):

Code:

Function Fakultaet%(wert%)
   if wert < 1    return 1
   return wert * Fakultaet(wert-1)
End Function
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Lifetec

BeitragMi, Aug 23, 2006 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist ja toll aber ich weiß trotzdem nicht wie ich das einfügen soll.
So das meine ganze Festplatte ausgegeben wird.
Könnte mir jemand einen Quellcode geben wo das gemacht wird.
 

Dreamora

BeitragMi, Aug 23, 2006 16:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Könnte ich, ja.
Werde ich aber nicht, da dich das nicht weiter bringt beim lernen. Und ich / wir haben nicht vor dir alle Probleme zu lösen, da Programmieren nunmal in erster Linie sehr viel nachdenken ist.

Und Argumente wie "ich bin neu" oder "ich habe doch keine Ahnung" gelten dabei nicht. Denn wenn dem so ist, beschäftige dich erst mit etwas einfacherem oder suche dir ein Hobby wo man nicht soviel und so strukturiert nachdenken muss und nicht so stark analytisch begabt sein muss wie beim Programmieren, sorry ...


Was du machen willst mit deiner funkt ist das gleiche wie bei der Fakultät, nur das du nichts ausrechnest damit, sondern Daten in Verzeichnissen und ihren Unterverzeichnissen sammelst (etwas anderes als verzeichnis und unterverzeichnis existiert nicht worin du suchen könntest)

Hier Mal eine Idee:
(nur pseudo code damit du weisst was überhaupt zu machen ist prinzipiell bei einer rekursiven Strukturierung des Problems)
Code:


readDirectory( lese laufwerke aus )    ; das heisst, für alle vorhandenen Laufwerke aufrufen

Function readDirectory(dir%)
   ; Lese alle Unterverzeichnisse
   ; und rufe für jedes Unterverzeichnis readDirectory auf

   ; lese alle Dateien

   ; gib diese Daten in einer nutzbaren Form zurück
   ;    hierfür eigenet sich wohl eine Bank am besten, da sie dynamische Grösse hat
   ;    Alternativ kann man auch direkt ein TreeView Gadget damit füttern
End Function
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

PSY

BeitragDo, Aug 24, 2006 14:28
Antworten mit Zitat
Benutzer-Profile anzeigen
hoi,

guckst du hier:

https://www.blitzforum.de/foru...ht=#195750

scroll runter bis zu meinem beitrag

ist allerdings in bb3d

l8er,
psy
 

Florian

BeitragSo, Aug 27, 2006 13:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo

Code:

Graphics 1000,700,0,2

Function lese(dir$)
 If Right$( dir$,1)<>"\" Then Dir$=Dir$+"\"
 Verz=ReadDir(dir$)
 Datei$=NextFile$(Verz) 
 While  Datei$<>""
  If FileType(dir$+Datei$ ) = 2 Then
   If Datei$ <> "." And Datei$ <>".." Then
    Print "Ordner:" +Dir$+ Datei$
    lese(Dir$+Datei$ )
   EndIf
  Else
   Print "Datei: " +Dir$+ Datei$
  End If
  Datei$=NextFile$(Verz)
 Wend
 CloseDir Verz
End Function

lese("C:\")
Stop


Code:

Function lese(dir$)
  Verz=ReadDir(dir$)
  Repeat
    Datei$=NextFile$(Verz)
    If Datei$="" Then Exit
    If FileType(dir$ + "\"+Datei$ ) = 2 Then
      If Datei$ <> "." And Datei$ <>".." Then
        DebugLog "Ordner:" + Datei$
        lese(dir$ + "\"+Datei$ )
      EndIf
    Else
     Print "Datei:" + Datei$ 
    End If
  Forever

  Print "-Ende-"
  Print ""

  CloseDir Verz
End Function

Graphics 800,600,0,0

lese("C:\")
Stop


Code:

Type DateiListeTyp
 Field Ordner$
 Field Dateiname$
 Field Erweiterung$
End Type

Global DateiListe.DateiListeTyp

SucheDateien "C:\","BMP|PNG|GIF|"

Function SucheDateien(Ordner$,Erweiterung$)
 If Len(Erweiterung$)>0 Then
  If Right$(Erweiterung$,1)<>"|" Then
   Erweiterung$=Erweiterung$+"|"
  End If
 End If

 If Right$(Ordner$,1)<>"\" Then
  Ordner$=Ordner$+"\"
 End If
 LangErweiterung=Len(Erweiterung$)
 OrdnerNr=ReadDir(Ordner$)
 If OrdnerNr=0 Then Return Ordner_Konnte_Nicht_auslesen_Werden

 Datei$=NextFile$(OrdnerNr)
 While Datei$<>""
  Select FileType((Ordner$+Datei$))
   Case COrdner
    If Datei$<>"." And Datei$<>".." Then   
     SucheDateien Ordner$+Datei$,Erweiterung$
    End If 
   Case CDatei
    DateiErweiterung$=Mid$(Datei$,Instr(Datei$+".",".")+1)
    DateiName$=Mid$(Datei$,1,Instr(Datei$+".",".")-1)
    If LangErweiterung>0 Then
     ErweiterungStimmt=False
     For PosErweiterung=1 To LangErweiterung
      Select Mid$(Erweiterung$,PosErweiterung,1)
       Case "|"
        If Upper$(TestErweiterung$)=Upper$(DateiErweiterung$) Then
         ErweiterungStimmt=True
         Exit
        End If
        TestErweiterung$=""
       Default
        TestErweiterung$=TestErweiterung$+Mid$(Erweiterung$,PosErweiterung,1)
      End Select   
     Next
     TestErweiterung$=""
     If TestErweiterung$<>"" And Upper$(TestErweiterung$)=Upper$(DateiErweiterung$) Then
      ErweiterungStimmt=True
     End If
    End If   
    If ErweiterungStimmt=True Or LangErweiterung=0 Then
     DateiListe= New DateiListeTyp
     DateiListe\Dateiname$=Dateiname$
     DateiListe\Ordner$=Ordner$
     DateiListe\Erweiterung$=DateiErweiterung$
    End If
  End Select
  Datei$=NextFile$(OrdnerNr)
 Wend
End Function

Function Upper$(S$)
 Slen=Len(S)
 If Slen>0 Then
  For P=1 To Slen
   ASCII=Asc(Mid$(S$,P,1))
   If Ascii>96 And Ascii<123 Then
     Ascii=Ascii-32
    ElseIf Ascii=252 Then ;ü
     Ascii=220     
    ElseIf Ascii=228 Then ;ä
     Ascii=196 
    ElseIf Ascii=246 Then ;ö
     Ascii=214
   End If
   R$=R$+Chr$(ASCII)
  Next
  Return R$
 End If
End Function


MfG

Florian

Neue Antwort erstellen


Übersicht BlitzBasic BlitzPlus

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group