# eine Textdatei einlesen / schreiben mit VB



## yan1 (15. Februar 2005)

Hi,

 ich möchte ein Programm mit Visual Basic schreiben, mit dem man mehrere programme auf einmal öffnen kann, dabei soll der benutzer eingeben können, welche Programme eingelsen sollen, und das auch speichern können, und somit beim nächsten Aufruf des Programmes die Werte noch eingetragen sind. Ich habe mir gedacht, die einfachste Lösung ist, seine Eingabe in eine Textdatei zeilenweise zu schreiben, und wieder herauslesen, aber wie geht das

 PS: Bitte einfache Lösung schreiben, bin noch ein grosser Anfänger in VB,
 danke für deine Antwort, Yanick


----------



## gabrielgsell (16. Februar 2005)

hier 
das nächste mal


----------



## yan1 (16. Februar 2005)

Danke,
aber ich möchte mehrere Variablen speichern, muss ich da für jede Variable eine Textdatei eröffnen, oder geht das, jede Zeile eine eigene Variable


----------



## Vektor (17. Februar 2005)

Nein, du kannst natürlich in eine Datei soviel Variablen sichern wie du willst.

Bei jedem "Print #Kanal" wird in eine neue Zeile geschrieben.

Und mit "Line Input #Kanal" wird eine komplette Zeile eingelesen.


----------



## yan1 (17. Februar 2005)

achso, ja, aber wie lese ich jetzt zum beispiel die dritte zeile der Textdatei?

so in etwa?
dim i as integer
dim variable as string

input pfad for input as #1
for i = 1 to 3
  line input #1, variable
  if i = 3 then
    msgbox "In der dritten Zeile steht das: " & variable
  end if
next i

geht das, oder gibt es  da eine einfachere variante?


----------



## Vektor (17. Februar 2005)

> input pfad for input as #1


Müsste funktionieren, aber du musst hier natürlich 

```
Open pfad for input as #1
```
verwenden.

Es gibt da auch noch die Funktion Seek() mit der man die Position verändern kann. Ich finde aber es geht leichter über das TextStreamObject. In verwendung mit dem FSO ist das eigentlich unschlagbar bei der Bedienbarkeit in zusammenhang mit Textdateien.

Zuerst musst du ein FSO erstellen.
Dann wird das TextStream an die Aktionen des FSO gehängt.


```
'Deklaration von TS Variable
Dim ts as TextStream
-------------------------------------------
Set ts as fso.OpenTextFile(Dateiname)

'Nun kann man mit ts in der durch das FSO geöffneten Textdatei arbeiten.
```

So gibt es z.B zum Lesen von Daten die Funktionen ts.Read, ts.ReadLine und ts.ReadAll.
Zum überspringen von Zeichen oder Zeilen kann man ts.Skip oder ts.SkipLine verwenden.
Und zum Schreiben von Daten nimmt man ts.Write und ts.WriteLine.
Die Funktionen ts.Line und ts.Collumn liefern die aktuelle Zeilen bzw. Spaltennummer zurück.
Dann kann noch mithilfe von ts.AtEndOfLine oder ts.AtEndOfStream die Zeilen- bzw. die Dateilänge abgefragt werden.
Geschlossen wird das TS dann mit ts.Close

Somit hat man eigentlich alles was man für den Umgang mit Textdateien braucht.


----------



## Topcam (18. Februar 2005)

Man kann dieses auch noch so machen , schreibe so meine ini Datei :

lege ein Modul an und füge dieses ein :


```
Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringByKeyName& Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lplFileName As String)
 
 
Public Function GetIniParam(NomFichier As String, NomSection As String, NomVariable As String) As String
Dim ReadString As String * 255
Dim returnv	As String
Dim mResultLen As Integer
 
mResultLen = GetPrivateProfileString(NomSection, NomVariable, "(Unassigned)", ReadString, Len(ReadString) - 1, NomFichier)
If IsNull(ReadString) Or Left(ReadString, 12) = "(Unassigned)" Then
	 Dim Tempvalue As Variant
	 Dim Message As String
 
	 returnv = ""
Else
	 returnv = Left(ReadString, InStr(ReadString, Chr$(0)) - 1)
End If
GetIniParam = returnv
End Function
 
Public Function WriteWinIniParam(NomDuIni As String, sLaSection As String, sNouvelleCle As String, sNouvelleValeur As String)
Dim iSucccess As Integer
 
	iSucccess = WritePrivateProfileStringByKeyName(sLaSection, sNouvelleCle, sNouvelleValeur, NomDuIni)
	If iSucccess = 0 Then
 
		WriteWinIniParam = False
	Else
		WriteWinIniParam = True
	End If
 
End Function
```
hier der schreib und lese befehl :


lesen :


```
Public Sub Inilesen()
datei$ = App.Path & "\daten.dat" 'schauen ob Datei vorhanden
If Dir$(datei$, vbNormal) <> "" Then
 
text1.Text = GetIniParam(datei$, "TEXT", "test")
check1.Value = GetIniParam(datei$, "was", "check") 
 
End Sub
```
 
Die Sache list die Datei "daten.dat" in der der Inhalt wie folgt steht :


```
[test]
Text1=was weiss ich
[was]
check=wahr
und so weiter ........
```
 

hier das schreiben :


```
Public Sub inischreiben()
datei$ = App.Path & "\daten.dat" 'wichtig
 
Call WriteWinIniParam(datei$, "test", "Text1", Text1.Text)
Call WriteWinIniParam(datei$, "was", "check", Check1.value)
End Sub
```
 

Hoffe es hilft 

Topcam


----------

