Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
gnarf
Anmeldungsdatum: 25.05.2013 Beiträge: 6
|
Verfasst am: 28.06.2013, 12:55 Titel: problem mit leerzeichen |
|
|
hallo leute ich hab da ein keines problem
ich hab vor kurzem ausser linux auch windows auf meinem computer
wenn ich zb. eine datei so öffnen will:
open "datei" + str$(1)
öffnet er unter linux mit dosbox "datei1"
und unter windows "datei 1"
scheinbar lässt dosbox an manchen stellen leerstellen automatisch weg
hat jemand eine idee wie mein programm unter dosbox unt unter windows funzt ??? |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 28.06.2013, 13:55 Titel: |
|
|
Hallo,
Leerzeichen in Dateinamen können immer mal wieder problematisch sein. Früher im 8.3-Dateinamensystem von DOS waren Leerzeichen in Dateinamen nicht gestattet. Dementsprechend würde ich mich nicht darauf verlassen, dass sie unter DOS / Windows / DosBox einheitlich und korrekt funktionieren.
Eine Abhilfe könnte darin bestehen, auf FreeBASIC umzusteigen. FreeBASIC kann mit den Dateipfaden arbeiten, mit denen auch das zugrundeliegende Betriebssystem (Windows / Linux / DOS) arbeitet, d.h. es ist nicht an alte 8.3-Konventionen gebunden (es sei denn, es soll tatsächlich ein DOS-Programm zur Ausführung unter DOS entwickelt werden).
Wenn möglich, sollte als allgemeine Abhilfe aber generell darauf verzichtet werden, Sonderzeichen- und Leerzeichen in Dateinamen zu benutzen. Dann gibt es keine Probleme mit nicht ganz optimalen Programmen, unterschiedlichen Betriebssystemen, URL-Encoding, Zeichensatz-Konvertierungen usw.
Im vorliegenden Fall könnte man z.B. einfach "DATEI001" schreiben oder so und hätte einen maximal kompatiblen Dateinamen mit demselben Informationsgehalt.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
gnarf
Anmeldungsdatum: 25.05.2013 Beiträge: 6
|
Verfasst am: 28.06.2013, 14:48 Titel: |
|
|
naja das leerzeichen entsteht ja automatisch
und ich kann die datei nicht einfach datei001 nennen da die zahl eine variable sein soll
sondern muss mit str$(x) arbeiten und dann setzt er ein leerzeichen vor das x
auf freebasic wechseln mach ich vielleicht auch mal aber ich arbeite schon recht lang an dem projekt und ich hab keine lust alles neu zu schreiben oder ist das so leicht zu übersetzen? |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 28.06.2013, 15:56 Titel: |
|
|
Hallo!
gnarf hat Folgendes geschrieben: | naja das leerzeichen entsteht ja automatisch
und ich kann die datei nicht einfach datei001 nennen da die zahl eine variable sein soll
sondern muss mit str$(x) arbeiten und dann setzt er ein leerzeichen vor das x |
Das ist gar kein Problem. Mit der Funktion LTRIM$() kann man das führende Leerzeichen entfernen lassen, das STR$() in QBASIC implizit mitliefert.
Beispiel:
Code: | Zahl% = 123
PRINT "__"; LTrim$(Str$(Zahl%)); "__"
SLEEP: END |
Mit führenden Nullen ist es vielleicht sogar noch etwas schöner. Dann sind die Dateinamen immer genau 8 Zeichen lang. Hier mal ein kleines Beispiel (für QBasic):
Code: | DECLARE FUNCTION GetNumberWithLeadingZeros$ (Number%, Length%)
DECLARE FUNCTION GetNumberFilename$ (Number%)
DIM Dateiname AS STRING
Dateiname = GetNumberFilename$(1) ' Erzeugt den Dateinamen "DATEI001"
PRINT "Schreibe in Datei "; CHR$(34); Dateiname; CHR$(34); "..."
OPEN Dateiname FOR OUTPUT AS #1
PRINT #1, DATE$; " "; TIME$; " Hallo Welt!"
CLOSE #1
PRINT "Fertig."
SLEEP: END
' Gibt einen nummerierten Dateinamen als String zurueck. Der Dateiname
' besteht aus einem Praefix (hier: DATEI). Darauf folgt eine dreistellige
' Zahl. Ist die Zahl kuerzer als 3 Stellen, wird mit fuehrenden Nullen
' aufgefuellt (z.B. "DATEI007").
'
FUNCTION GetNumberFilename$ (Number%)
IF (Number% < 0) OR (Number% > 999) THEN
ERROR 254
ELSE
GetNumberFilename$ = "DATEI" + GetNumberWithLeadingZeros$(Number%, 3)
END IF
END FUNCTION
' Gibt eine Zahl mit fuehrenden Nullen aus, sofern noetig.
' Wenn Sie als Number% 42 uebergeben und als Length% bspw. 4, so ergibt
' sich die Funktionsrueckgabe "0012". Ist Number% schon ohne Nullen laenger
' als die Wunschlaenge (z.B. 12345 und Length% = 3), so werden die ueber-
' stehenden Ziffern links abgeschnitten.
'
FUNCTION GetNumberWithLeadingZeros$ (Number%, Length%)
IF (Number% < 0) OR (Length% < 1) THEN
ERROR 255
ELSE
NumString$ = STRING$(Length%, "0") + LTRIM$(STR$(Number%))
GetNumberWithLeadingZeros$ = RIGHT$(NumString$, Length%)
END IF
END FUNCTION |
gnarf hat Folgendes geschrieben: |
auf freebasic wechseln mach ich vielleicht auch mal aber ich arbeite schon recht lang an dem projekt und ich hab keine lust alles neu zu schreiben oder ist das so leicht zu übersetzen? |
Pauschal kann man das nicht beantworten, ohne das Programm zu kennen. Viele QBasic-Programme laufen ohne Änderungen auch mit FreeBASIC (ggf. "-lang qb" Kommandozeilen-Parameter benutzen). Wenn du jedoch Libs verwendest (AK-Lib, UGL, ...), mit Interrupts oder CALL ABSOLUTE arbeitest, wird es hingegen schwerer. Bspw. eigene Maus-Routinen aus QB/DOS laufen in FreeBASIC nicht mehr. Dafür bietet FreeBASIC jedoch schon von Haus aus Mausunterstützung (siehe GETMOUSE).
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
gnarf
Anmeldungsdatum: 25.05.2013 Beiträge: 6
|
Verfasst am: 28.06.2013, 21:12 Titel: |
|
|
oh danke genau das hab ich gesucht dachte ich mir doch das es da eigentlich einen ganz einfachen Befehl für gibt
freebasic probier ich mal aus ich hab zwar eine mausroutine drin aber das geht bestimmt gut auszuwechseln
vielen dank das war ja doch eigentlich nich so schwer aber dieser eine befehl... |
|
Nach oben |
|
|
|