Probleme mit Input #ff, Print #ff

Moin,
Ich schreibe StimeV(Readzähler) in einer Datei und lese sie nach dem starten wieder ein. StimeV ist ein String.
Input #ff, StimeV(Readzähler)

Print #ff, StimeV(Readzähler)
Mein Problem ist das wenn ich den Inhalt der Variable in das Textfile schreibe und später wieder auslese wird gern mal aus einem „Erster Start“ ein „Erster“ Also wird die der Inhalt nach dem Leerzeichen abgeschnitten. aber warum ?

mfg jonny

Hi Joe,

Input #ff, StimeV(Readzähler)

Also wird die der Inhalt
nach dem Leerzeichen abgeschnitten. aber warum ?

Weil Du ein Wort liest, nicht eine Zeile.
Du wolltest ‚Line Input‘ verwenden.

Wenn es mehr als eine Zeile ist, verwende Get, das ist schneller.

Gruß Rainer

Input #ff, StimeV(Readzähler)

Also wird die der Inhalt
nach dem Leerzeichen abgeschnitten. aber warum ?

Hallo Rainer,

Weil Du ein Wort liest, nicht eine Zeile.
Du wolltest ‚Line Input‘ verwenden.

IMHO unterscheiden sich Input und Line Input nur durch die unterschiedliche Reaktion auf ein Komma, was man durch meinen Code ja auch sieht, wenn man mal die Eine, mal die Andere Print-Anweisung benutzt.
Leerzeichen spielen da keine Rolle.

Wenn es mehr als eine Zeile ist, verwende Get, das ist
schneller.

Wie geht das, bzw. ich weiß mit Get kann man auslesen, aber nur wenn man feste Stazlängen hat, oder habe ich da was falsch kapiert.
Kann man mit Get diese Text-Datei mit unterschiedlicher Satzlänge auslesen?

Erster Start
paris
Hello world
Stolperjürgen passt zu Bayern

Ich könnte das, wenn überhaupt nur, wenn ich die Datei komplett einlese als String und dann mit Split nach zeichen 10 und 13 trenne.

Nachfolgend der VB-Code.

Gruß
Reinhard

Private Sub Form\_Load()
Dim FF, Satz
FF = FreeFile
Open "H:\Joe.txt" For Output As #FF
Print #FF, "Erster Start"
'Print #FF, "Erster, Start"
Close #FF
FF = FreeFile
Open "H:\Joe.txt" For Input As #FF
While Not EOF(FF)
 Input #FF, Satz
 MsgBox Satz
Wend
Close #FF
FF = FreeFile
Open "H:\Joe.txt" For Input As #FF
While Not EOF(FF)
 Line Input #FF, Satz
 MsgBox Satz
Wend
Close #FF
End Sub

Hallo Reinhard,

IMHO unterscheiden sich Input und Line Input nur durch die
unterschiedliche Reaktion auf ein Komma, was man durch meinen
Code ja auch sieht, wenn man mal die Eine, mal die Andere
Print-Anweisung benutzt.
Leerzeichen spielen da keine Rolle.

ja, aber wie man bei Joe sieht, macht Input gelegentlich Fehler.

Wenn es mehr als eine Zeile ist, verwende Get, das ist
schneller.

Wie geht das, bzw. ich weiß mit Get kann man auslesen, aber
nur wenn man feste Stazlängen hat, oder habe ich da was falsch
kapiert.

Jein. Du hast recht, aber man kann ja die ganze Datei als Satzlänge angeben.

Ich könnte das, wenn überhaupt nur, wenn ich die Datei
komplett einlese als String und dann mit Split nach zeichen 10
und 13 trenne.

Die Sätze dann mit Split trennen, richtig aber dazu brauchst Du die Charakter nicht einzeln, dafür hat VB eine Konstante.

Zeile = Split(Txt, VbCrLf)

Private Sub Command1\_Click()
 Dim ff As Integer, txt As String, Na As String, l As Long, Zl() As String
 Na = "C:\Test.txt"
 l = FileLen(Na)
 txt = Space(l)
 Open Na For Binary As #ff
 Get #ff, , txt
 Close #ff
 Zl = Split(Txt, VbCrLf)
End Sub

Das ist viel schneller als die Schleife.

Gruß Rainer

Hallo jonny.

Input #ff, StimeV(Readzähler)

Print #ff, StimeV(Readzähler)

Ich bin mir nicht mehr sicher, ob das richtig ist, was ich hier erzähle, aber ich kann mich an Probleme mit Print erinnern. Ich habe sie, wenn mich nicht alles täuscht, gelöst bekommen, indem ich einfach „Write“ verwendet habe statt „Print“. Ausprobieren kannst Du ja 'mal.

VG
Carsten

Hi Joe,

ich habe mir noch mal ein Beispiel mit Input gebaut und kann Dein Problem nicht nachvollziehen.

Private Sub Command1\_Click()
 Dim ff As Integer, txt As String, na As String
 na = "C:\Test.txt"
 ff = FreeFile
 Open na For Output As #ff
 Print #ff, "Test"
 Print #ff, "Versuch Fortsetzung"
 Print #ff, "Versuch 2"
 Print #ff, 3;
 Print #ff, ". Versuch"
 Print #ff, "Probe"
 Close #ff

 Open na For Input As #ff
 Do
 Input #ff, txt
 List1.AddItem txt
 Loop While Not EOF(ff)
 Close #ff
End Sub

Kein Fehler. Sogar die Zeile „3. Versuch“ wird so angezeigt.
Der Weg über Get und Put ist zwar schneller, aber es ging ja um einen Fehler. Eventuell zeigst Du uns mal etwas mehr Code?

Gruß Rainer

Moin Rainer,
Ich lese immer eine Zeile.
Wenn ich jetzt Line Input verwende bekomme ich einen TYP Mismatch
bei meiner Variable CheckV. Wenn ich nur Input nehme geht es wieder.
hmpf. was muss ich noch beachten ?

Open App.Path & "\config.o2" For Input As #ff
 Dim Readzähler As Integer
 Readzähler = 0
 For Readzähler = 0 To 59
 Line Input #ff, CheckV(Readzähler)

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Danke Euch !!
Integer schreibe ich nun mit Input und Strings mit line Input.
werde das mal testen

DANKE

Hi Joe,

Ich lese immer eine Zeile.
Wenn ich jetzt Line Input verwende bekomme ich einen TYP
Mismatch

hmmmm, das bedeutet, daß der Variablentyp nicht passt.
Eine Zahl in einen String zu verwandeln macht VB selbst, wenn die Zahl mit einem String verknüpft werden soll, deshalb nehme ich an, daß ein String in eine Variable geladen werden soll, die als Int, Long, Single oder Double deklariert ist.

Eventuell ein Problem mit Dezimalkomma/Dezimalpunkt? Das ließe sich beheben, wenn die Zeile in einen String gelesen wird, dort mit Replace() das Komma in einen Punkt verwandelt und mit Val() an die Double? - Variable übergeben wird.

Was sagt denn der Debugger?

Gruß Rainer