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:

Open funktion klappt nicht
Gehe zu Seite 1, 2, 3  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
Kettenfresser



Anmeldungsdatum: 18.10.2008
Beiträge: 35

BeitragVerfasst am: 18.10.2008, 12:36    Titel: Open funktion klappt nicht Antworten mit Zitat

Hallo, ich schreibe gerade ein Programm in dem ich dei Open Funktion brauche, leider klappt das nicht:
(test.txt ist im selben ordner)
Code:

do
open "test.txt" for output as 1
input #1, ausgabe$
close 1
loop until ausgabe$ = "'codeende"

Dann ist imer Open markiert und als Fehler steht dort "ungültiger Dateiname"
Wo ist der Fehler missbilligen

MfG
Lukas Ich brauch nen Kaffee...
_________________

TT-Forum
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 18.10.2008, 13:12    Titel: Antworten mit Zitat

Hallo,

mit dem Zugriffsmodus OPEN wird eine neue Datei angelegt oder, falls die Datei mit dem angegebenen Namen bereits existiert, wird diese überschrieben. Die Leseoperation INPUT passt also nicht zum Schreib-Zugriffsmodus. Richtig wäre also
Code:
DO
 OPEN "test.txt" FOR INPUT AS #1
 INPUT #1, ausgabe$
 CLOSE #1
LOOP UNTIL ausgabe$ = "'codeende"

Allerdings ist der Code inhaltlich nicht sinnvoll, wenn es darum geht, eine Datei zeilenweise einzulesen. In jedem Schleifendurchlauf wird die Datei neu geöffnet, die erste Zeile ausgelesen, die Datei wird geschlossen und der Ablauf beginnt von vorne. Wenn die erste Dateizeile nicht 'codeende ist, handelt es sich bei dem Code um eine Endlosschleife.

Um eine Datei Zeile für Zeile auszulesen, müsstest du so vorgehen:
Code:
OPEN "test.txt" FOR INPUT AS #1
DO UNTIL EOF(1) 'Mach so lange bis EOF (=EndOfFile, EndeDerDatei)
 LINE INPUT #1, Ausgabe$
 PRINT Ausgabe$ 'Zeile auf den Bildschirm ausgeben
 IF Ausgabe$ = "'codeende" THEN EXIT DO 'Nicht nur bei Dateiende, sondern auch bei dem Zeileninhalt 'codeende aufhören.
LOOP
CLOSE #1

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 18.10.2008, 13:24    Titel: Antworten mit Zitat

Hallo

Warum du die Meldung "unzulässiger Dateiname" erhälst, verstehe ich nicht. Ist das, was du hier gepostet hast dein Originalcode? Vielleicht hast du in deinem richtigen Programm aus Versehen einen Doppelpunkt statt eines Punktes oder so gesetzt oder ist test.txt nur ein Beispiel? Der Dateiname darf in QB nicht länger als acht Zeichen plus die durch Punkt getrennte Endung sein. Ist er länger, musst du ihn auf die ersten sechs Zeichen plus Tilde und Nummer abkürzen Aus "neuestextdokument.txt" wird also z.B. "neuest~1.txt". Mit FILES kannst du dir den Inhalt des Arbeitsverzeichnisses ansehen. Sind dort Dateien mit zu langen Namen drin, siehst du, wie das mit dem abkürzen aussieht.

Du öffnest die Datei übrigens mit FOR OUTPUT zum schreiben und willst dann mit INPUT #1 lesen. Und QB sucht immer im Arbeitsverzeichnis nach der Datei, das muss nicht das Verzeichnis sein, in dem das Programm steht. Wenn es das nicht ist, musst du erst dorthin wechseln bzw den Dateinamen um die komplette Pfadangabe erweitern.

Gruß
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Kettenfresser



Anmeldungsdatum: 18.10.2008
Beiträge: 35

BeitragVerfasst am: 18.10.2008, 14:26    Titel: Antworten mit Zitat

danke an euch beide
auch nach dem 2. beispiel von sebastian hat es nicht geklappt.
Aber durch den Tipp von Skilltronic klappte es besser (es kam ne andere Meldung)

Eigentlich möchte ich nur etwas in die Datei schreiben.
Mein Originalcode:
Code:
Open "lmb.txt" for output as #1
do until eof(1)
line input #1, ausgabe$
print ausgabe$
if ausgabe$ = "'codeende" then ext do
loop
close #1


das ist alles in einer txt-datei
wäre es auch möglich das in eine .bas datei zu schreiben?
wäre sinnvoller siehe:

http://forum.qbasic.at/viewtopic.php?t=5997
_________________

TT-Forum
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 18.10.2008, 15:09    Titel: Antworten mit Zitat

Kettenfresser hat Folgendes geschrieben:
danke an euch beide
auch nach dem 2. beispiel von sebastian hat es nicht geklappt.
Aber durch den Tipp von Skilltronic klappte es besser (es kam ne andere Meldung)


Es wäre schon recht hilfreich zu wissen, welcher Tip zu welcher neuen Fehlermeldung führt, wie soll man dir sonst antworten?

Nochmal: du öffnest in deinem Programm die Datei zum Schreiben mit OUTPUT und willst dann Daten einlesen mit INPUT. Das geht nicht.

OPEN...FOR OUTPUT erstellt übrigens immer eine neue, leere Datei. Gibt es schon eine mit dem gleichen Namen, wird diese überschrieben und die Daten sind weg. Willst du das verhindern, musst du z.B. mit APPEND (anhängen) öffnen.

Was das mit der .bas-Datei angeht. Ich bin nicht sicher, ob das Schreiben eines eigenen Compilers als erstes Projekt für einen Neuling, wie du offensichtlich einer bist, so geeignet ist.

Gruß
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Kettenfresser



Anmeldungsdatum: 18.10.2008
Beiträge: 35

BeitragVerfasst am: 18.10.2008, 15:31    Titel: Antworten mit Zitat

Ich bin nicht sooo neu
ich hatte vorher visualbasic

Aber das ist ja nicht so schlimm, ich habe mir das so in den Kopf gesetzt.
Also muss ich for input schreiben oder wie?
_________________

TT-Forum
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 18.10.2008, 16:54    Titel: Antworten mit Zitat

Kettenfresser hat Folgendes geschrieben:
Also muss ich for input schreiben oder wie?


Ja, natürlich, wenn du Daten aus der Datei einlesen willst. So, wie es Sebastian in seinem Beispiel auch macht.

Gruß
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Kettenfresser



Anmeldungsdatum: 18.10.2008
Beiträge: 35

BeitragVerfasst am: 18.10.2008, 17:42    Titel: Antworten mit Zitat

ich will aber nur was reinschreiben zwinkern
_________________

TT-Forum
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



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

BeitragVerfasst am: 18.10.2008, 18:11    Titel: Antworten mit Zitat

Dann brauchst du dem entsprechend FOR OUTPUT, kannst aber dann kein INPUT # verwenden (das liest schließlich und schreibt nicht).
Statt INPUT # brauchst du PRINT # oder WRITE #.
_________________
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
Kettenfresser



Anmeldungsdatum: 18.10.2008
Beiträge: 35

BeitragVerfasst am: 19.10.2008, 20:49    Titel: Antworten mit Zitat

Ist das auch in Freebasic so? lächeln
Ich habs nämlich fast mit Freebasic
Nur das klappt halt net:
Code:
Sub speichere
   Open "lmb.txt" for output as #1
do until eof(1)
print #1, ausgabe
'print ausgabe
if ausgabe = "'codeende" then exit do
loop
close #1
End sub

_________________

TT-Forum
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



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

BeitragVerfasst am: 19.10.2008, 21:24    Titel: Antworten mit Zitat

Kettenfresser hat Folgendes geschrieben:
Ist das auch in Freebasic so? lächeln

Ja.

Wenn du ausgabe nicht als SHARED deklariert hast, dann ist es in der SUB speichere nicht bekannt. Dann musst du es neu deklarieren.
_________________
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
nemored



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

BeitragVerfasst am: 19.10.2008, 21:27    Titel: Antworten mit Zitat

** doppelpost traurig **
_________________
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
Kettenfresser



Anmeldungsdatum: 18.10.2008
Beiträge: 35

BeitragVerfasst am: 20.10.2008, 07:18    Titel: Antworten mit Zitat

Das habe ich eingegeben
Code:
dim shared as string ausgabe

Yahooo!!!! Yahooo!!!! Yahooo!!!!
Ja es hat geklappt, danke!

(hmm jetzt wirds langsam peinlich)
Jetzt zeigt er nur noch eine zeile als fehler an:
Code:
goto speicherjanein

es gibt den sub speicherjanein
aber er zeigt trotzdem fehler an.
bei anderen goto befehlen hats aber geklappt
mit call aber nicht
wo ist jetzt der fehler?
_________________

TT-Forum
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 20.10.2008, 13:11    Titel: Antworten mit Zitat

Wenn es eine Sub ist, dann brauchst du für gewöhnlich kein goto sondern einfach nur den Namen der Sub an der Stelle,
wo du sie zum Einsatz bringen willst.

Goto springt zu einem Label und sollte lieber vermieden werden.
Alles nachzulesen in der Befehlsreferenz
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kettenfresser



Anmeldungsdatum: 18.10.2008
Beiträge: 35

BeitragVerfasst am: 20.10.2008, 13:25    Titel: Antworten mit Zitat

ich habs probiert...
wenn ich das mache, wird der sub speicherjanein als fehler gekennzeichnet
und alle "sprünge"
bsp:
Select Case LCase(savejanein)
Case "ja"
speichere 'wird als fehler gezeigt...
Case "nein"
End
Case Else
print "Sie haben etwas unverständliches eingegeben. Bitte versuchen Sie es erneut!"
End Select
_________________

TT-Forum
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 20.10.2008, 13:40    Titel: Antworten mit Zitat

Du musst Subs natürlich irgendwo ganz oben deklarieren.

Code:
declare sub speichere


Wenn es nicht daran liegt, dann poste mal, was für ein Fehler angezeigt wird.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kettenfresser



Anmeldungsdatum: 18.10.2008
Beiträge: 35

BeitragVerfasst am: 20.10.2008, 13:49    Titel: Antworten mit Zitat

verlegen wie peinlich....
so einen Fehler zeigt er noch an:

C:\FreeBASIC\bin\win32\ld.exe: cannot open output file compiler1.exe: Permission denied
_________________

TT-Forum
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 20.10.2008, 13:57    Titel: Antworten mit Zitat

Du musst dein laufendes Programm schließen, bevor du es nochmal kompilieren kannst.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kettenfresser



Anmeldungsdatum: 18.10.2008
Beiträge: 35

BeitragVerfasst am: 20.10.2008, 15:17    Titel: Antworten mit Zitat

hmm, das programm läuft ja nicht, das ist das problem.
_________________

TT-Forum
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 20.10.2008, 15:40    Titel: Antworten mit Zitat

Der Fehler kommt meines Wissens nur dann, wenn man versucht ein laufendes Programm nochmal zu öffnen.
Weil das nicht geht, wird der Zugriff dann verweigert.
Schau doch mal im Taskmanager nach, ob sich dort ein Prozess "compiler1.exe" befindet, der sich nicht richtig beendet hat.
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, 3  Weiter
Seite 1 von 3

 
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