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 ?
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
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
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.
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?
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]
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.