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:

Dateien aus Unbekannten Verzeichnissen kopieren.
Gehe zu Seite 1, 2  Weiter
 
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
bm-magic



Anmeldungsdatum: 28.02.2013
Beiträge: 29

BeitragVerfasst am: 20.03.2013, 01:46    Titel: Dateien aus Unbekannten Verzeichnissen kopieren. Antworten mit Zitat

Vorab:
Dank Deutschen DOS Forum und hauptsächlich ANTONIS.DE
(Wo ich fast alle Beschreibungen über QBasic gelesen und viele Beispiele versucht hatte)
denn ich hoffte, ohne fremde Hilfe das Problem in den Griff zu bekommen,
Bin ich zu diesem Stand gekommen und nun kein Einstieg finde.

Aufgabe: DOS 6.2;
- In einem Ordner1 gibt eine unbekannte Anzahl von Unterverzeichnissen.
- Im jedem Unterverzeichnis ist eine *.txt Datei.
Die Aufgabe ist alle *.txt Dateien auf ext. Laufwerk zu sichern.
Leider duldet DOS 6.2 keine Platzhalter im Ordner Namen!
Stand:
- Mit [DIR Ordner1 > dir.txt] sind die Unterordner in [dir.txt] aufgelistet.
Mit [VARSET.COM] (von Horst Schaeffer) wird die Anzahl der Unterverzeichnissen
in [SET Variable N=x] dokumentiert mit dem Aufruf:
[CALL VAR SET N=DIRS D:\ORNER1\*.* (wird die Menge der Ordner als N=x eingetragen)]
- Mit [LMOD.COM] (auch Horst Schaeffer) bekommt man die Namen ab Zeile 8 gelesen
und kann sie in N Batch weiter verwenden. Aufruf:
Type dir.txt | LMOD /L8 [$1] > L8.TXT L=Zeilen Nr. [$Word Nr.] [Für das erste Name)
Type dir.txt | LMOD /L8+1 [$1] > L8+1.TXT L=Zeilen Nr. [$Word Nr.] [Für den zweiten Name).
Problem:
- DOS 6.2 kann nicht rechnen also muss man mit QBasic weiter machen.
- Wie bekommt man die [L(+N] als Wert um die Aufrufe zu automatisieren und die Menge zu
begrenzen?
- Am liebsten hätte ich mit VARSET die Ordner Namen als SET Name_1= ; bis Name_L = weiter verwendet.

Bitte, bitte um eine Hilfe
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HorstD



Anmeldungsdatum: 01.11.2007
Beiträge: 83

BeitragVerfasst am: 20.03.2013, 18:16    Titel: Antworten mit Zitat

Zitat:
Die Aufgabe ist alle *.txt Dateien auf ext. Laufwerk zu sichern.


Sollen die Dateien alle im selben Ordner oder mit Unterverzeichnissen gesichert werden?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


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

BeitragVerfasst am: 20.03.2013, 18:53    Titel: Antworten mit Zitat

Vor dem Neuerfinden vom Rad, schau Dir zuerst einmal XCOPY genauer an, ob "*.txt" und "/s" nicht bereits Deinen Bedarf abdeckt.

Ansonsten ist etwas Eigenes entwickeln nicht so schwierig, ist eine Aufgabe für Rekursion, bei welcher Du ein Verzeichnis mit DIR$ durchgehst, sobald der Eintrag ein Unterverzeichnis ist, rufst Du die entsprechende SUB einfach noch einmal auf!

Falls DIR$ fehlt, ist ein CALL INTERRUPT auf INT 21h, AH=4Eh das Richtige oder ein SHELL "dir", wenn die Lösung externe Programme verwenden darf.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
bm-magic



Anmeldungsdatum: 28.02.2013
Beiträge: 29

BeitragVerfasst am: 20.03.2013, 23:15    Titel: Dateien aus Unbekannten Verzeichnissen kopieren Antworten mit Zitat

Danke für die sicher gut gemeinte Hilfe.
Natürlich möchte ich das Rad nicht neu erfinden.
Leider habe ich so ein Rad noch nirgendwo gefunden traurig
- XCOPY verwende ich sowieso, um die Originale nicht zu zerstören, aber
es sollen alle *.txt Dateien in einem Ordner gesichert werden und ich muss
den letzten bekannten Ordner überspringen damit ich aus der
unbekannten Unterverzeichnissen die Daten kopieren kann.
- Ich habe leider Deine folgende Sätze nicht verstanden, da ich mit
QBasic erst seit etwa einen Monat aus Verzweiflung konfrontiert bin und
ich finde leider kein Einstieg.
- Bis jetzt ändert jeder Versuch einen Aufruf aus Qbasic zu starten mit
irgend einer Fehlermeldung die ich nicht verstehe.
- Heute hatte ich mich z.B. die Qbasic den ganzen Tag gequält nur weil ich
versucht habe über ENVIRON eine Variable zu setzen. Erst als ich nach
vielen Std. unten Datei\Betriebssystem\ gewählt habe wurde der Wert akzeptiert.
Um meinen Wunsch in Qbasic zu verwirklichen werde ich mehrere Jahre brauchen.
- Darum hoffe ich auf Hilfe von einen "Profi".
- Es hilft mir leider nicht zu wissen DIR$ ist die Lösung, weil ich es (noch) nicht anwenden kann.
- Aber drotz dem vielen Dank
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1749
Wohnort: [JN58JR] DeltaLabs.de

BeitragVerfasst am: 21.03.2013, 00:01    Titel: Antworten mit Zitat

Die aufgabe ist ansich ja recht einfach gehalten und prinzipiel auch eifnach zu lösen.

ich gehe mal davon aus, das du noch keine wirkliche erfahrung mti (Q)Basic hast. Zumindest lese ich das aus deinen Postings heraus.

Es ist natürlich ideal, wenn man ein Programm erzeugt, das einem genau diese Aufgabe abnimmt, und man nicht viel in andere datein oder BATCH Programme packen muss.

Daher:
1. Erst muss man sie die aufgabe vor augen führen und herausfinden und aufschlüsseln, welche Schritte nötig sind, um das geforderte Problem lösen zu können. (Ähnlich wie man es von hand tuen würde)
2. Das Programm schreiben, das diese schritte, nacheinander abarbeiten kann

Zu 1.
Gegeben ist ein Verzeichniss, in dem sich eine unbekannte anzahl weiterer Verzeichnisse befindet, in welchen jeweils eine txt datei liegt, dessen namen nicht bekannt ist.
Aufgabe ist, diese Dateien auf ein laufwerkzu sichern.

Zerpflückt würde die aufgabe also so aussehen, das man zuerst einmal das verzeichniss auslesen würden. Sprich, herausfinden, wieviele weitere unterverzeichnisse existieren, und wie dessen bezeichnung ist.

anschliessend muss herausgefunden werden, wie die TXT datei in diesem verzeichniss heist, um sie später kopieren zu können.

als nächstes muss diese datei auf das ziellaufwerk kopiert werden.

zu 2.
Ich will dich jetzt nicht von QB weg bekommen, aber wenn du FreeBasic nutzt, ist es deutlich einfacher, das geforderte Problem zu lösen, da es einige neuere Funktionen zur verfügung stellt, welche in QB nicht vorhanden sind.

Daher beschreibe ich es einfach mal mit FB mittel. Dies könnte dir jedocha uch beim lösen des Problemes allgemein helfen.

Um herauszufinden, was in einem gegebenen verzeichniss liegt, gibt es den, schon von dir entdeckten "dir" befehl.
Code:
Ergebniss = Dir(<Ausgangspfad>, <maske>, <ergebniss attribute>)

Um "Dir" aufrufen zu können benötigst du also einige angaben.
Die erste ist eine Variable (Ergebniss), welche als String ausgelegt ist. Sie wird den Namen speichern, der aktuell in unserer Auflistung der nächste ist.
Ausgangspfad ist ebenfalls ein String, der den Pfad enthält, dessen inhalt du auflisten möchtest. Dieser endet üblicher weise mit einem *, das angibt, das man alles auflisten möchte, das in diesem Verzeichniss vorhanden ist.
Maske ist ein Zahlenwert, der einige Eigenschaften der Suche bestimmen. (Persönlcih nutze ich hier immer -1, und filtere später per attribut).
ErgebnissAttribut ist ein Pointer (Ein Zeiger, macht nix, wenn du das nicht kennst), auf eine Variable, welche später die Atribute speichern wird, der zurückgegebenen Datei.

Ein Beispiel (läuft leider nur mit FB)
Code:

Dim Ergebniss as String
Dim TAttribut as Integer
Ergebniss = Dir("C:/*", -1, @TAttribut)


Zuerst 2 Variablen erzeugen, welche einmal das ergebniss und einmal die attribute speichern wird. Anschliessend die Funktion aufrufen. Diese füllt daraufhin beide Variablen mit den geforderten Werten.

Um ein komplettes verzeichniss aufzulisten, muss "Dir" erneut aufgerufen werden.
Hierbei muss jedoch die Pfadangabe auf "" gesetzt werden, um den nächsten Eintrag in dem Verzeichniss zu erhalten. Wird hier wieder ein Pfad angegeben, dann geht FB davon aus, das ein anderes Verzeichniss aufgelistet werden soll, und startet die auflistung erneut von vorn.

Sprich:
Code:

Ergebniss = Dir("C:/*", -1)
Ergebniss = Dir("", -1)
Ergebniss = Dir("", -1)
'...

Auf diese Art geht man stück für stück alle einträge in dem angegebenem Verzeichniss "C:/" durch.
den aufruf wiederholt man solange, bis im "Ergebniss" nichts mehr drin steht. Sprich:
Code:

If Ergebniss = "" Then


Als Tip sei gesagt, du kannst hier mit Do ... Loop arbeiten, um die Auflistung vorzunehmen.


Nachdem die Elemente nun schon einmal gefunden werden, müssen wir nachsehen, ob das Ergebniss auch ein Verzeichniss ist, oder ob es sich um eine Datei handeln könnte, die irrtümlicher weise auch auf C:/ liegen könnte.

Hierfür Prüft man das ErgebnissAttribut mit
Code:
If (ErgebnissAttribut and &H10) <> 0 Then

Wenn das Ergebniss ein Verzeichniss ist, dann wird über diese prüfung das ErgebnissAttribut (verknüpft mit einem flag) ungleich 0 sein. Dann weist du, das in Ergebniss ein Name von einem Verzeichniss steht.

Ist dem der fall, dann kannst du zum nächsten Schritt gehen udn herausfinden, ob eine Datei in dem Ordner ist, welche ein TXT ist.

Du schreibst, das es nur eine Ist. Das macht es einfacher, und kann mit einem kleinen Trick sehr kompackt erfasst werden.

Wir haben beim auflisten des Verzeichniss ein * angegeben. Dies könnten wir nun erweitern, um nur TXT dateien auflisten zu können.
Code:
Ergebniss = Dir("C:/VERZEICHNISS/*.txt", -1, ErgebnissAttribut)


Dies sogt jetzt dafür, das nur noch Rückgaben erfolgen, die mit .txt enden.
Wenn sich zu 100% nur eine datei in dem ordner befindet, kannst du prüfen, ob das ergebniss <> "" ist. Wenn dem so ist, dann hast du automatisch den dateiname dieser datei.

jetzt kannst du den Ausgangspfad, den gefundenen Verzeichnissname und den Dateinamen zusammensetzen und hast damit den Pfad zur quelldatei.
Code:
Quelldatei = Ausgangspath & Verzeichnissname & "/" & Dateiname

Da dir "DIR" nur einen Name, ohne / am ende liefert, musst du diesen natürlich von hand nach dem Verzeichnissname hinzufügen.

hast du ein Statisches Ziel, dann kannst du mit einem Aufruf von z.B. XCopy per Shell-Befehl von FB den Kopiervorgang einleiten.

Code:
Shell "xcopy " & quelldatei & " " & zieldatei

Hierbei ist quelldatei und zieldatei eine Variable, welche entsprechend gefüllt werden muss.

Ich empfehle dir aber, bevor du xcopy oder einen anderen shell befehle aufrufst, einfach mal die angaben auf der konsole auszugeben.
Das machst du solange, bis keine fehler mehr produziert werden, und du 100prozent sicher bist, das die ausgabe auf der konsole genau die ist, welche als Shell-befehl ausgeführt werden soll.

Beispiel:
Code:
Dim Quelldatei as String
Dim Zieldatei as String
Quelldatei = "C:/verzeichniss/1.txt"
Zieldatei = "D:/1.txt"
Print "Xcopy " & Quelldatei & " " & Zieldatei



Wie du jetzt aber Quelldatei und Zieldatei zusammengesetzt bekommst, überlasse ich einmal dir. Sozusagen aus Ansporn grinsen auch noch etwas zu machen, und nicht gleich alles vor die nase gesetzt zu bekommen.

Aber, ich hoffe trotzdem, das ich dir hiermit etwas helfen konnte.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ DeltaLab's ][ ToOFlo ][ BGB-Movie ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
bm-magic



Anmeldungsdatum: 28.02.2013
Beiträge: 29

BeitragVerfasst am: 21.03.2013, 00:02    Titel: Dateien aus Unbekannten Verzeichnissen kopieren. Antworten mit Zitat

- Ich habe gerade in Qbasic nach DIR gesucht, aber der Befehl
gibt es bei mir nicht.
- INFO bei DOS 6.22 ist die Qbasic Version 1.1 (habe gerade gelesen)
- In irgend einer Anleitung habe ich nun gesehen, dass der DIR$ Befehl
erst ab QuickBASIC 7.1/PDS zu Verfügung steht.
- Bitte es zu berücksichtigen. Danke
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
bm-magic



Anmeldungsdatum: 28.02.2013
Beiträge: 29

BeitragVerfasst am: 21.03.2013, 00:14    Titel: Dateien aus Unbekannten Verzeichnissen kopieren. Antworten mit Zitat

Hallo ThePuppetMaster,
danke für die Antwort.
- Du weißt nicht, wie viel Du mir geholfen hast auch wenn ich Deine sehr schöne
Erklärung noch nicht verstanden habe.
- Ich werde es studieren und werde sicher einige Aufrufe anwenden Können.

Sehr großen Dank
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


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

BeitragVerfasst am: 21.03.2013, 13:26    Titel: Re: Dateien aus Unbekannten Verzeichnissen kopieren Antworten mit Zitat

bm-magic hat Folgendes geschrieben:
- Heute hatte ich mich z.B. die Qbasic den ganzen Tag gequält nur weil ich
versucht habe über ENVIRON eine Variable zu setzen. Erst als ich nach
vielen Std. unten Datei\Betriebssystem\ gewählt habe wurde der Wert akzeptiert.

Artikel aus meiner Sammlung zu genau diesem Thema:

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/EinbettungBSY.html

Das Wichtigste daraus: Sache mit dem Vater-Sohn-Prozess musst Du verstanden haben!

Zum Verzeichnis auslesen: Dir$ hat Microsoft selber erst bei PDS spendiert, aber FreeBasic besitzt übrigens auch eine MS-DOS-Portierung. Sonst CALL INTERRUPT gibt es auch erst ab dem QB 4.5-Compiler. => In QB 1.1 bleibt somit nur SHELL "dir" (unpraktisch wegen länderspezifischem Aussehen des Outputs, d.h. Programm wird möglicherweise nur spezifisch auf Deiner einzelnen Maschine richtig funktionieren, ausser Du verwendest /B!) übrig.

Anonsten denke ich, sollte Deine Problemstellung umformuliert werden + ein einfacher Testfall definiert werden. Versuch von mir: Verzeichnisbaum abtraversieren, bei jedem gefundenen *.TXT eine bestimmte Operation ausführen.

Testfall:

C:\FOO\BAR\T123.TXT
C:\FOO\BAR2\T345.TXT
C:\FOO\BAR2\BAR3\T445.TXT
C:\FOO\BAR2\BAR3\T777.TXT

Verarbeitung: Einfach definieren, was Du tun würdest, wenn Du das Endergebnis komplett von Hand mit Texteditor und Windows Explorer erledigen würdest.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
HorstD



Anmeldungsdatum: 01.11.2007
Beiträge: 83

BeitragVerfasst am: 21.03.2013, 15:41    Titel: Antworten mit Zitat

Alternativ kannst du auch den FirstBasic Compiler verwenden.
FirstBasic ist eine Shareware Version von PowerBASIC 2.1
Download: http://www.powerbasic.com/support/downloads/files/FirstBas.zip

- Keine Mausbedienung
- DIM nur für Arrays
- Nur englische Hilfe
- Kontextsensitive Hilfe mit STRG+F1
- Speichern unter --> Write to

Hier ein Beispiel:
Aus allen Unterverzeichnissen von ordner1 wird jeweils eine txt-Datei in das Zielverzeichnis kopiert.
Alle txt-dateien in das selbe Verzeichnis.
Das Ziel-Verzeichnis muss vorhanden sein.




Code:

$COMPILE EXE
CLS
DIM arr$(1:50)   '<-- max 50 Unterverzeichnisse, evtl. anpassen
Pfad$ = "c:\ordner1"
Ziel$ = "d:\###\"   '<--- Zielordner anpassen
uordner$ = DIR$(pfad$ + "*.*",16)

WHILE LEN(uordner$)

    x% =  ATTRIB(pfad$ + uordner$)
    IF x% = 16 THEN
        i% = i% + 1
        arr$(i%) = pfad$ + uordner$
        '? uordner$
    END IF
    uordner$ = DIR$
WEND

FOR j% = 1 TO i%
    '? str$(j%) + " " + arr$(j%)
    datei$ = DIR$(arr$(j%) +  "\*.txt")
    IF LEN(datei$) THEN
        OPEN arr$(j%) + "\" + datei$ FOR INPUT AS #1
        OPEN ziel$ + datei$ FOR OUTPUT AS #2
            WHILE NOT EOF(1)
                LINE INPUT #1, t$
                PRINT #2, t$
            WEND
        CLOSE
    END IF

    ? arr$(j%);"\";datei$
NEXT

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1749
Wohnort: [JN58JR] DeltaLabs.de

BeitragVerfasst am: 21.03.2013, 20:13    Titel: Antworten mit Zitat

@HorstD es ist eigentlich nicht gesund, Line Input zu nutzen, bei einem Datei-Kopiervorgang. Du kannst nciht wissen, ob dort zeilenumbrüche drin sind. egal ob txt oder nicht.

es ist immer sinvoll kopiervorgänge als binäres verfahren zu realisieren, blockbasiert. das führt auserdem dazu, das man einen stabilen kopierprozess hat, der mit konstanter geschwnidigkeit abläuft. Was bei unterschliedlichen zeilenlängen, die auch mal mehrere MB sein könnten, auch zu problemen des speichermanagments führen kann.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ DeltaLab's ][ ToOFlo ][ BGB-Movie ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
bm-magic



Anmeldungsdatum: 28.02.2013
Beiträge: 29

BeitragVerfasst am: 21.03.2013, 23:29    Titel: Dateien aus Unbekannten Verzeichnissen kopieren Antworten mit Zitat

Zu erst habe ich versucht, FreeBasic zu organisieren.
- Als ich aber die Menge der Möglichkeiten und Kombinationen gesehen habe,
habe ich ich lieber aufgehört, und habe den Ganzen Tag weiter gemacht.

- Dank eurer Hilfe, habe ich wirklich neu angefangen.
- Es folgt die Arbeit des Tages mir "rauchendem Kopf" lächeln
----------------------------------------------------
- DIR3.BAS
CLS
SHELL "dir D:\test\*.txt /W /B /S > D:\qbasic\dat.dat"
END
- Hiermit bekomme ich den komplette Pfad mit allen Namen, in Zeilen aufgelistet. zwinkern lächeln
----------------------------------------------------
- DIR4.BAS
LS
a& = 0
OPEN "dat.dat" FOR INPUT AS #1
DO UNTIL EOF(1)
LINE INPUT #1, Text$
PRINT Text$
a& = a& + 1
IF a& = 20 THEN
b$ = INPUT$(1)
CLS
a& = 0
END IF
LOOP
CLOSE 1
- Damit sehe ich die Komplette Liste auf dem Bildschirm.
-------------------------------------------------------
Nun zu meiner Frage:
- Wie überredet man die QBasic dazu mit DIR4.BAS,
der Inhalt der dat.dat gleich zu kopieren, statt ihm anzuzeigen?

Ich hoffe, dass sich jemand erbarmt und mir weiter hilft.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HorstD



Anmeldungsdatum: 01.11.2007
Beiträge: 83

BeitragVerfasst am: 22.03.2013, 01:40    Titel: Antworten mit Zitat

Zitat:
- Wie überredet man die QBasic dazu mit DIR4.BAS,
der Inhalt der dat.dat gleich zu kopieren, statt ihm anzuzeigen?


Indem du die Zieldatei per Output öffnest.

Sieh dir dazu mein Firstbasic Beispiel an.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
bm-magic



Anmeldungsdatum: 28.02.2013
Beiträge: 29

BeitragVerfasst am: 22.03.2013, 16:20    Titel: Dateien aus Unbekannten Verzeichnissen kopieren Antworten mit Zitat

@HorstD es tut mir leid aber es ist zu viel Code für mich.
- Zu erst habe ich versucht Hilfe zu DIR$ zu bekommen, leider ohne Erfolg,
denn alle (mögliche) Artikel waren leider in englisch. Verstehe ich genauso
wenig, wie Deine Hilfe. Was bedeutet 16 in dem DIR$ Ausdruck?
- Ich nehme nur an, dass in dem oberem While - Wend Schleife die Anzahl
der Einträge ermittelt wird, die man in der untere Schleife benutzt,
und diesen Teil ich sowie so nicht mit meinen Mitteln verwenden kann.

- Leider kann ich aber in Deinem Beispiel kein Befehl erkennen,
der bewirkt, das in das Zielordner kopiert wurde.? traurig
- Wäre bitte eine Hilfe zu meinem Istzustand möglich?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HorstD



Anmeldungsdatum: 01.11.2007
Beiträge: 83

BeitragVerfasst am: 22.03.2013, 20:51    Titel: Antworten mit Zitat

Hier ein Qbasic Beispiel.

Alle txt-Dateien werden in das Zielverzeicnis kopiert.

Code:

DIM text AS STRING, tmp AS STRING
DIM ziel AS STRING
DIM i AS INTEGER, p AS INTEGER
ziel = "c:\neu\"    '<-- Zielverzeichnis muss vorhanden sein

CLS

OPEN "dat.dat" FOR INPUT AS #1
DO UNTIL EOF(1)
    LINE INPUT #1, text
    PRINT text
    IF UCASE$(RIGHT$(text, 3)) = "TXT" THEN
        i = 1 : p = 0
        WHILE INSTR(i, text, "\")
            p = INSTR(i + p, text, "\")
            i = i + p + 1
        WEND

        OPEN text FOR INPUT AS #2   'Textdatei öffnen
        OPEN ziel + MID$(text, p + 1) FOR OUTPUT AS #3 'Textdatei im Zielverzeichnis erstellen

        WHILE NOT EOF(2)
            LINE INPUT #2, tmp   'Txt-Datei zeilenweise lesen
            PRINT #3, tmp        'und in neue Datei im Zielverzeichnis schreiben.
        WEND
        CLOSE #2
        CLOSE #3
    END IF

LOOP
CLOSE 1

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


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

BeitragVerfasst am: 22.03.2013, 21:32    Titel: Re: Dateien aus Unbekannten Verzeichnissen kopieren Antworten mit Zitat

bm-magic hat Folgendes geschrieben:
SHELL "dir D:\test\*.txt /W /B /S > D:\qbasic\dat.dat"

Wichtige Unschönheit: dat.dat ist etwas Temporäres! Folglich lieber
Code:
SHELL "dir D:\test\*.txt /W /B /S >" + ENVIRON$("TEMP") + "\dat.dat"

verwenden und am Schluss nach dem CLOSE noch ein
Code:
KILL ENVIRON$("TEMP") + "\dat.dat"

ausführen. Siehe dazu auch

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/EinbettungBSY.html

bm-magic hat Folgendes geschrieben:
- Wie überredet man die QBasic dazu mit DIR4.BAS,
der Inhalt der dat.dat gleich zu kopieren, statt ihm anzuzeigen?

Und hier bist Du noch etwas schuldig. Dazu zur Erinnerung nochmals den Testfall:

C:\FOO\BAR\T123.TXT
C:\FOO\BAR2\T345.TXT
C:\FOO\BAR2\BAR3\T445.TXT
C:\FOO\BAR2\BAR3\T777.TXT

Ich weiss bis jetzt von Dir gar noch nicht, ob Du z.B. die Ordnerstruktur auch erhalten willst, z.B. beispielsweise

D:\ZIEL\BAR\T123.TXT
D:\ZIEL\BAR2\T345.TXT
D:\ZIEL\BAR2\BAR3\T445.TXT
D:\ZIEL\BAR2\BAR3\T777.TXT

(noch klar zu definieren: Ob gesamter Unterverzeichnisbaum einschliesslich Ordner ohne .TXT am Ziel erstellt werden soll oder ob die Pfade mit .TXTs drin am Ziel erstellt werden sollen)

entstehen soll, oder ob die Ordnerhierarchie zerschlagen werden soll, so dass beispielsweise

D:\ZIEL\T123.TXT
D:\ZIEL\T345.TXT
D:\ZIEL\T445.TXT
D:\ZIEL\T777.TXT

entsteht (ebenfalls noch klar definieren, was im Fall von zwei gleichnamigen, aber in unterschiedlichen Unterverzeichnissen abgelegten Dateien passieren soll!).

Ebenfalls eine Variante: Nur eine Datei

D:\ZIEL\SAMMEL.TXT

wo einfach die Inhalte der einzelnen .TXTs aneinandergekettet sind (Linux: "cat"-Befehl!).

In dem Sinn gilt also: 100% klar spezifizieren, was Du überhaupt schlussendlich als Ergebnis haben möchtest und erst dann im QB mit Umsetzen beginnen.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4209
Wohnort: ~/

BeitragVerfasst am: 22.03.2013, 21:50    Titel: Re: Dateien aus Unbekannten Verzeichnissen kopieren Antworten mit Zitat

bm-magic hat Folgendes geschrieben:
- Zu erst habe ich versucht Hilfe zu DIR$ zu bekommen, leider ohne Erfolg,
denn alle (mögliche) Artikel waren leider in englisch. Verstehe ich genauso
wenig, wie Deine Hilfe. Was bedeutet 16 in dem DIR$ Ausdruck?

Schau mal in der FreeBASIC-Referenz nach - ist im Prinzip derselbe Befehl mit nur wenigen Unterschieden wie z. B., dass in QBasic das Dollarzeichen erforderlich ist.
Überhaupt kannst du die FreeBASIC-Referenz weitgehend nutzen; beachte dazu immer die Anmerkungen am Ende ("Unterschiede zu QB").
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
bm-magic



Anmeldungsdatum: 28.02.2013
Beiträge: 29

BeitragVerfasst am: 22.03.2013, 23:26    Titel: Dateien aus Unbekannten Verzeichnissen kopieren Antworten mit Zitat

@HorstD, - vielen Dank. Bin noch am suchen, QB behauptet bei dem Satz
- OPEN text FOR INPUT AS #2; [Pfad nicht gefunden] -?
- Ich habe auch kein Ahnung wo die (?text?) gebildet wird,
- Ich habe nun QB in PC Pfad eingeschrieben es hat nicht geholfen?
- ?
@dreael, - danke für die Hilfe, werde es in der Endphase beachten, zur Zeit
ist die dat.dat fast das einzige, was funktioniert und ich freue mich, das es sie gibt.
Deine Hilfe über Vater -> Sohn Beziehung versuche ich mich
vor Augen vorstellen. (manchmal klappt es)
- Die Struktur der Sicherung: Nur ein Ordner mit "Akt.Datum". Übrigens
an dem Lösung bist Du, am 01.03.2013 mitbeteiligt gewesen, zu dem nemored und Jojo,
dafür werde ich euch "Ewig" dankbar sein.
- Dies ist meine zweite Berührung mit QB (weil DOS &.22 nicht rechnen kann
denn ich hoffte es mit Batch zu lösen, dort kann ich aber nicht subtrahieren).

@nemored, - danke für den Hinweis werde es befolgen, da aber meine
QB nicht DIR$ kann, ist das Thema (wegen aktuellen Problemen) zu erst verschoben.

@ALLE Leider habe ich immer noch keine Lösung :..(
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4209
Wohnort: ~/

BeitragVerfasst am: 22.03.2013, 23:54    Titel: Antworten mit Zitat

Zitat:
OPEN text FOR INPUT AS #2; [Pfad nicht gefunden]

An der Stelle von 'text' muss dein Dateiname stehen. Wenn du 'FOR INPUT' öffnest (zum Auslesen aus einer Datei), muss diese zuvor existieren. Wolltest du nicht in eine Datei schreiben? Dann brauchst du 'FOR OUTPUT'.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
bm-magic



Anmeldungsdatum: 28.02.2013
Beiträge: 29

BeitragVerfasst am: 23.03.2013, 01:46    Titel: Dateien aus Unbekannten Verzeichnissen kopieren Antworten mit Zitat

-Erste Teil-Erfolg!?
Inhalt von dat.dat:
D:\uordner1\Default\default.txt
D:\uordner1\neu\neu.txt
D:\uordner1\test\test.txt
Der Code von HorstD von 22.03.2013, 19:51
------------------------------------------------------
Im Zielordner wird die Datei defaul.txt korrekt erstellt
IM QB erscheint Meldung Pfad nicht gefunden
und die Zeile OPEN ziel + MID$(Text, p +1)... Ist grellweiß ?
----------------------------------------------------------------------
Nach dem schlissen von QB sehe ich auf Bildschirm:
D:\uordner1\Default\default.txt
D:\uordner1\neu\neu.txt <- Die Datei wird nicht im Zielordner Erstellt.
------------------------------------------------------------------------
Ist es bitte erklärbar?

@nemored, Danke - "Ein Click auf Blaue Schrift und ich war auf der richtige Seite
für FreeBasic Download Seite. Ich möchte nicht wissen, wie es funktioniert.
- Die FB-REF.CHM kann ich offen lächeln

- Wenn es auch so einfach mit diesem Programm wäre? traurig
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HorstD



Anmeldungsdatum: 01.11.2007
Beiträge: 83

BeitragVerfasst am: 23.03.2013, 01:58    Titel: Antworten mit Zitat

Zitat:

- Ich habe auch kein Ahnung wo die (?text?) gebildet wird,


Genauso wie text$ aus deinem DIR4.BAS
Wenn text voeher als Stringvariable geDIMmt (DIM text as STRING) wird, kann das $ entfallen.

Zitat:

- OPEN text FOR INPUT AS #2; [Pfad nicht gefunden] -?


text ist eine Zeile aus der "dat.dat".
Wenn in der dat.dat nicht mehr vorhandene Verzeichnisse stehen kommt der Fehler.
Also: Vorher dein DIR3.BAS laufen lassen.
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 QBasic. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
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