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:

problem mit leerzeichen

 
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
gnarf



Anmeldungsdatum: 25.05.2013
Beiträge: 6

BeitragVerfasst am: 28.06.2013, 11:55    Titel: problem mit leerzeichen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5900
Wohnort: Deutschland

BeitragVerfasst am: 28.06.2013, 12:55    Titel: Antworten mit Zitat

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
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
gnarf



Anmeldungsdatum: 25.05.2013
Beiträge: 6

BeitragVerfasst am: 28.06.2013, 13:48    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5900
Wohnort: Deutschland

BeitragVerfasst am: 28.06.2013, 14:56    Titel: Antworten mit Zitat

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
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
gnarf



Anmeldungsdatum: 25.05.2013
Beiträge: 6

BeitragVerfasst am: 28.06.2013, 20:12    Titel: Antworten mit Zitat

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
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
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