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() überschr. Speicherinhalte

 
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
Anistasius



Anmeldungsdatum: 18.01.2006
Beiträge: 37

BeitragVerfasst am: 18.08.2006, 15:07    Titel: Dir() überschr. Speicherinhalte Antworten mit Zitat

Der dir() Befehl überschreibt Speicherinhalte.

Folgender kleiner Test läßt sich unter 0.15 /0.16
sowohl bei Windows wie auch bei Linux reproduzieren. traurig

' Testprogramm für dir----------
wonach$=""
wonach$=command$
kopie$=wonach$

print "Wonach:";wonach$
' Hier sollte die Paramteruebergabe angezeigt werden,
' es werden aber die Dateinamen angezeigt ?!?


print "Kopie:";kopie$
' Hier ebenfalls

maske$=wonach$
xx$= Dir(maske$, 1+2+4+32)

sleep
end
'-----------------------------------

Weiß jemand was da los ist?

Viele Grüße
Anistasius
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 18.08.2006, 17:47    Titel: Antworten mit Zitat

ja,
du hast die Anführungszeichem bei der Parameterangabe vergessen.

Prog.exe "Parameter"
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Anistasius



Anmeldungsdatum: 18.01.2006
Beiträge: 37

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

Hi Volta,

hmmm, dann geht es, aber seit wann müssen bei einer Parameterübergabe Anführungszeichen eingegeben werden, um ein Überschreiben zu verhindern?

Wenn ich sie weg lasse, gibt er "Wonach:prog.bas prog.exe" aus.
D.h. die Variable wonach$ wird hier mit Daten überschrieben, mit denen sie überhaupt keinen Kontakt
hat und die zum Zeitpunkt des "Print" noch nichtmals im Ablauf existieren sollten.
Kann ich mir eigentlich nur so erklären, Wonach$ ist lediglich ein Verweis auf einen Bereich wo Command$ abgelegt ist.
Und dieser wird dann auch vom Dir Output überschrieben. Ich denke nicht das dies im Sinne des Erfinders ist zwinkern

....Aber zumindest komme ich erstmal weiter. Vielen Dank für den Tipp! lächeln


Editiert:
Habe mich geirrt, nicht der Dir verhält sich eigenartig, sondern Command (*oder die heutigen Betriebssysteme).
Wenn er eine Parameterübergabe mit Wildcards bekommt, sucht er sich im vorauseilendem Gehorsam
Dateien dazu zusammen.

Wenn ich also "prog p*" aufrufe, beinhaltet command$ nicht "p*" sondern alle Dateinamen die er mit p findet.
Falls das beabsichtigt/unumgänglich ist, sollte man es aber mit die Beschreibung aufnehmen.



Viele Grüße
Anistasius

* Ich hatte 1993 so einen kleinen Zusatzbefehl für DOS verbreitet. "execu.exe" Wurde aufgerufen wie DOS Dir
legte aber die Pfad u. Dateinamen in Form von "&1 c:\pfad\datei &2 &3 &4" in einer Bat Datei ab.
Diese konnte man dann editieren und mit dem gewünschten Bearbeitungsbefehl starten.
Ideal um eine große Anzahl von Dateien zu bearbeiten. Da ich gerade >200 Bilder bearbeiten muß, wollte ich ihn rasch konvertieren, aber bei "execu ggcover*.jpg" kam nur krudes Zeug raus. Früher brauchte man keine Anführungszeichen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 19.08.2006, 12:27    Titel: Antworten mit Zitat

Hi,
warum ein Parameter ohne Anführungszeichen gleich als Ergebnis 'DIR Parameter' über den Command$ zurück gegeben wird kann ich dir auch nicht erklären.
Dieses Verhalten kannst du aber ausnutzen mit:
Code:
Dim n As Integer
'mit 'prog.exe *.bas' Parameter ohne Anführungszeichen
'Command(0) liefert immer 'LW:\Pfad\progname.exe'
'Command(1 ... n) die nachfolgenden Parameter (hier alle bas-Dateinamen)
'Parameter mit Anführungszeichen  prog.exe "*.bas"
'Command(0) wie oben ; Command(1) = *.bas ; sonst nichts
Do
  ?Command(n);"  ";
  n+=1
Loop Until Command(n)=""
Sleep
(Alles nur unter ME getestet, XP kann sich anders verhalten?)

Gruß Volta
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
raph ael



Anmeldungsdatum: 12.04.2006
Beiträge: 472

BeitragVerfasst am: 19.08.2006, 15:26    Titel: Antworten mit Zitat

DIR()?
Was ist denn das für ein Befehl?
_________________
Zitat:
1000 Yottabytes sind absurd. 640 Yottabytes sollten genug für jeden sein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 19.08.2006, 15:53    Titel: Antworten mit Zitat

Der hier grinsen
Die Befehlsreferenz ist dein Freund!
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
raph ael



Anmeldungsdatum: 12.04.2006
Beiträge: 472

BeitragVerfasst am: 19.08.2006, 16:00    Titel: Antworten mit Zitat

Das weis ich selber!
Aber bei "D" habe ich nichts gefunden.
_________________
Zitat:
1000 Yottabytes sind absurd. 640 Yottabytes sollten genug für jeden sein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 19.08.2006, 16:58    Titel: Antworten mit Zitat

dann versuch mal:
http://referenz.freebasic.de/Referenz.php?zeig=tuts&col1=a0d5d0&ref=yes&show=DIR#3
das ist die gleiche Seite (3. Absatz).
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Anistasius



Anmeldungsdatum: 18.01.2006
Beiträge: 37

BeitragVerfasst am: 20.08.2006, 16:55    Titel: Antworten mit Zitat

Habe es hinbekommen lächeln
Ohne Anführungszeichen aber mit optionalen Paramtern:

Anhängen= Die Script/Stapeldatei mit den Dateinamen und Platzhaltern wird dann nicht überschrieben
Zähler= Jede Zeile bekommt eine Nummer mit vorlaufenden Nummern.
Brauchbar wenn man ein Verzeichnis mit vielen Dateien (z.B. Bilder) hat, die alle
in eine gerordnete Namensstruktur gebracht werden sollen.

execu *.jpg -vn:3

Die Stapeldatei könnte dann so aussehen.

&1 meinfoto031004.jpg &2 &3 001 &4
&1 urlaub22.jpg &2 &3 002 &4
&1 urlaub24.jpg &2 &3 003 &4
&1 meinfoto67.jpg &2 &3 004 &4
usw.
Nach etwas "suchen/ersetzen" im Editor, siehts dann vielleicht so aus:

copy meinfoto031004.jpg /fotos2003/urlaub001.jpg
copy urlaub22.jpg /fotos2003/urlaub002.jpg
copy urlaub24.jpg /fotos2003/urlaub003.jpg
copy meinfoto67.jpg /fotos2003/urlaub004.jpg

Eine andere Anwendung ist die Stapeldatei (heißt immer "exegen") gleich mit einem Programm zu starten.
z.B.
exegen.bat scalpic 400 300

Wenn die Zeile so aussieht: %1 meinfoto67.jpg %2 %3 %4
würde er sie so aufrufen: scalpic meinfoto67.jpg 400 300


Löppt unter Linux und Windows/Dos (Win98 getestet)

Wer es haben möchte (6KB) :
http://www.anistasius.de/execu.bas

Ist manchmal ziemlich nützlich.

Viele Grüße
Anistasius
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