|
| Autor |
Nachricht |
exe23_ Tutorial Leser

Anmeldedatum: 05.03.2008 Beiträge: 22
|
Eine bestimmte Zeile auslesen
Verfasst am: 11.03.2008, 19:04 |
|
|
| hi, wie kann ich etwas in eine bestimmte zeile in einer .ini speichern (will ne variable speichern) und dann wie kann ich eine bestimmte zeile wieder laden ??? ich weiss das es hier bestimmt schon oft gepostet wurde aber ich beschäftig mich damit schon den ganzen tag und probier rum aber ich kreigs einfach net hin ... kann mir vllt jmd helfen??^^ |
|
| |
|
 |
the_gam3r_ Coder

Anmeldedatum: 09.02.2008 Beiträge: 89
|
Verfasst am: 11.03.2008, 19:37 |
|
|
Open dateipfad For Input As #1
dum useless as string
dim penis as string
Input #1, Useless
Input #1, Useless
Input #1, Useless
Input #1, Useless
Input #1, Useless
Input #1, penis
Close #1
hier wird die 6te zeile ausgelesen^^ |
|
| |
|
 |
c0re_ « Moderator »

Anmeldedatum: 29.11.2007 Beiträge: 425
|
Verfasst am: 11.03.2008, 19:44 |
|
|
Oder preziser.
| Code: | Dim sVar As String, Zeilennummer As Integer
Zeilennummer = 5 ' <- ersetzen
Open Dateipfad For Input As #1
For i = 0 To Zeilennummer
Input #1, sVar
Next
Input #1, sVar
Close #1 |
Es ist das selbe Prinzip nur mit Schleife und an einer Zeilennummer orientiert.
 |
|
| |
|
 |
Rausch_ Poster

Anmeldedatum: 03.11.2007 Beiträge: 164
|
Verfasst am: 11.03.2008, 19:46 |
|
|
benutz dieses modul:
| Code: | '###modIniZugriff
Option Explicit
' Private Type SettingPair
' ValName As String
' Value As String
' End Type
' Einen Wert aus einer INI Datei lesen
Public Function GetIniValue(ByVal File As String, ByVal Section As String, ByVal ValName As String) As Variant
Dim temp As String
Dim actSection As String
Dim ff As Integer
On Error GoTo ErrOut
ff = FreeFile
Open File For Input As #ff
Do Until EOF(ff)
' Die Datei wird Zeilenweise gelesen
Line Input #ff, temp
If Len(temp) > 2 Then
' Oh, eine neue Sektion.
If Left(temp, 1) = "[" Then
actSection = Mid(temp, 2, Len(temp) - 2)
' Ein weiterer Eintrag.
Else
' Sind wir überhaupt in der Richtigen Sektion?
If LCase(Section) = LCase(actSection) Then
' Wenn der Wert passt, geben wir ihn zurück.
If LCase(Left(temp, InStr(temp, "=") - 1)) = LCase(ValName) Then
GetIniValue = Mid(temp, InStr(temp, "=") + 1)
GoTo ErrOut
End If
End If
End If
End If
Loop
ErrOut:
If GetIniValue = "" Then GetIniValue = "Ungültiger Wert"
' Wir wollen ja keinen Müll hinterlassen.
If ff <> 0 Then Close #ff
End Function
' Einen Wert in eine INI Datei schreiben.
Public Function SetIniValue(ByVal File As String, ByVal Section As String, ByVal ValName As String, ByVal Value As Variant) As Boolean
Dim ff As Integer
Dim ff2 As Integer
Dim written As Boolean
Dim temp As String
Dim actSection As String
On Error GoTo ErrOut
ff = FreeFile
' Wir brauchen eine temporäre Datei
Open File & ".tmp" For Output As #ff
' Wenn das original schon existiert...
If Len(Dir(File)) > 0 Then
ff2 = FreeFile
' ...öffnen.
Open File For Input As #ff2
Do Until EOF(ff2)
Line Input #ff2, temp
If Len(temp) > 0 Then
' Sind wir in einer neuen Rubrik?
If Left(temp, 1) = "[" Then
' Prüfen, ob das unsere Rubrik WAR.
If LCase(actSection) = LCase(Section) Then
' Wenn wir noch nicht geschrieben haben, existiert
' der Wert noch nicht.
If Not written Then Print #ff, ValName & "=" & Value
written = True
End If
' Den neuen Wert speichern
actSection = Mid(temp, 2, Len(temp) - 2)
' ...und weiter kopieren...
Print #ff, temp
' Nein, es ist ein Eintrag.
Else
' Sind wir in der richtigen Rubrik?
If LCase(actSection) = LCase(Section) Then
' Ist das unser Wert?
If LCase(Left(temp, InStr(temp, "=") - 1)) = LCase(ValName) Then
' Ja? Dann schreiben wir den Neuen rein.
Print #ff, ValName & "=" & Value
written = True
Else
' Sachade. Weiterkopieren.
Print #ff, temp
End If
Else
' Falsche Rubrik. Kopieren.
Print #ff, temp
End If
End If
End If
Loop
' Schließen.
Close #ff2
ff2 = 0
End If
' Wenn die Rubrik nicht existiert, wurde auch nichts geschrieben.
' Wir hängen die neue Sektion hinten dran.
If Not written Then
' Diese Überprüfung findet erst vor der nächsten Sektion statt.
' Wenn diese aber die letzte ist, müssen wir dies hier
' nachholen.
If LCase(Section) = LCase(actSection) Then
Print #ff, ValName & "=" & Value
Else
Print #ff, vbCrLf & "[" & Section & "]"
Print #ff, ValName & "=" & Value
End If
End If
' so weit so gut, nun auch die neue Datei speichern
Close #ff
ff = 0
' Die alte löschen und durch die neue ersetzen
If Len(Dir(File)) > 0 Then Kill File
Name File & ".tmp" As File
' Fertig.
SetIniValue = True
ErrOut:
If ff <> 0 Then Close #ff
If ff2 <> 0 Then Close #ff2
End Function
' Einen Wert aus einer INI Datei löschen
Public Function DelIniValue(ByVal File As String, ByVal Section As String, ByVal ValName As String) As Boolean
Dim ff As Integer
Dim ff2 As Integer
Dim temp As String
Dim actSection As String
On Error GoTo ErrOut
ff = FreeFile
' Auch hier brauchen wir zunächst eine 2. Datei
Open File & ".tmp" For Output As #ff
' Wenn das Original schon existiert, öffnen.
If Len(Dir(File)) > 0 Then
ff2 = FreeFile
Open File For Input As #ff2
Do Until EOF(ff2)
' Zeilenweise einlesen
Line Input #ff2, temp
If Len(temp) > 0 Then
' Achtung. Sektionswechsel
If Left(temp, 1) = "[" Then
actSection = Mid(temp, 2, Len(temp) - 2)
Print #ff, temp
' Nur ein normaler Eintrag
Else
' Sind wir in der richtigen Sektion?
If LCase(actSection) = LCase(Section) Then
' Muss der Wert NICHT dran glauben? Dann kopieren.
If LCase(Left(temp, InStr(temp, "=") - 1)) <> LCase(ValName) Then
Print #ff, temp
End If
Else
' Falsche Sektion.
Print #ff, temp
End If
End If
End If
Loop
' Schließen
Close #ff2
ff2 = 0
End If
' Speichern
Close #ff
ff = 0
' Ersetzen
If Len(Dir(File)) > 0 Then Kill File
Name File & ".tmp" As File
' Ende
DelIniValue = True
ErrOut:
If ff <> 0 Then Close #ff
If ff2 <> 0 Then Close #ff2
End Function |
|
|
| |
|
 |
the_gam3r_ Coder

Anmeldedatum: 09.02.2008 Beiträge: 89
|
Verfasst am: 11.03.2008, 20:14 |
|
|
| komplizierter gehts ja garnet |
|
| |
|
 |
c0re_ « Moderator »

Anmeldedatum: 29.11.2007 Beiträge: 425
|
Verfasst am: 11.03.2008, 20:17 |
|
|
Das ist nicht kompliziert. Das sind nur Funktionen die man nun mit Pfad und Zeilennummer aufrufen kann.
 |
|
| |
|
 |
exe23_ Tutorial Leser

Anmeldedatum: 05.03.2008 Beiträge: 22
|
Verfasst am: 11.03.2008, 21:03 |
|
|
ok die sachen haben mir schon sehr geholfen THX @ all
aber bin jetzt mal nach der methode von c0re gegangen hat auch soweit geklappt nur ich will mehere zeilen auslesen/speichern und dann kommt da immer das for schon verwendet wird ... wie kann ich des umgehen ( sry wenns ne noobfrage is ich komm einfach grad net drauf^^) |
|
| |
|
 |
Kackwurst28_ Newbie

Anmeldedatum: 18.11.2007 Beiträge: 6
|
Verfasst am: 13.03.2008, 14:39 |
|
|
Ich habe zu dem Thead auch eine Noobfrage.
Und zwar wenn ich das so mache wie es c0re gepostet hatt, aber meine Datei nicht so lang ist.
Also ich was auslesen will, das aber nicht da ist, weil die Datei schon zu ende ist, dann kommt immer ein Fehler.
Kann ich das irgendwie so machen, dass der Fehler nicht kommt und es einfach nicht ausgelesen wird.
Also dass der beim Auslesen der Datei am Ende einen Stopp macht?
Edit: Danke Zig, für die schnelle Antwort, hat mir geholfen.
Zuletzt bearbeitet von Kackwurst28_ am 13.03.2008, 17:30, insgesamt einmal bearbeitet |
|
| |
|
 |
ZiG_ Überflieger

Anmeldedatum: 07.03.2007 Beiträge: 1248
|
Verfasst am: 13.03.2008, 14:56 |
|
|
Du kannst vorher die Datei mal durchlaufen und die Zeilen zählen lassen.
Das ist auch sehr praktisch, da man damit gleich eine Progressbar dann noch laufen lassen kann.
Du kannst aber auch eine Do loop Schleife nutzen.
| Code: |
Do Until EOF(1)
loop
|
EOF = End Of File
Die Schleife läuft also so lange bis das Ende der Datei 1(Oder die Nummer, die du gewählt hast) erreicht is.
mfg Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde) |
|
| |
|
 |
exe23_ Tutorial Leser

Anmeldedatum: 05.03.2008 Beiträge: 22
|
Verfasst am: 17.03.2008, 19:15 |
|
|
komisch also eigentlich klappt ja alles soweit nur ich kriegs einfach beim besten willen net hin etwas in eine bestimmte .ini zeile zu schreiben ! so das ich dann auch nur wieder diese zeile aufrufen kann ... kann mir jmd. helfen??
hier mal mein bisheriger code :
| Code: | Private Sub cmd_benutzer1_Click()
Dim Kanal As Integer
zeilennummer = 0
Kanal = FreeFile
Open "C:\" & settings & "settings.ini" For Input As #Kanal
For i = 0 To zeilennummer
Input #Kanal, userdata_1
Next
Input #Kanal, passdata_1
Close #Kanal
accname_txt.Text = userdata_1
password_txt.Text = passdata_1
End Sub | des is jetzt zum laden und hier nochmal zum abspeichern:
| Code: | Benutzerwahl = CInt(Val(InputBox("Bitte geben sie den gewünschten Benutzer an", "Benutzerwahl")))
If Benutzerwahl = "1" Then
userdata_1 = accname_txt.Text
passdata_1 = password_txt.Text
Dim Kanal As Integer
Dim zeilennummer As Integer
zeilennummer = 0
Kanal = FreeFile
Open "C:\" & settings & "settings.ini" For Append As #Kanal
For i = 0 To zeilennummer
Print #Kanal, userdata_1
Print #Kanal, passdata_1
Next i
Close #Kanal
End If |
es gibt insgesamt 4 benutzer (in dem jeweils die dazu gehörigen userdaten und passdaten abgespeichert und auch wieder aufgerufen werden sollen)...das funktioniert zwar auch aber auch nur solange man es in der richtigen reihenfolge macht ... ansonsten stimmen die daten nicht überein und da ich nicht immer davon ausgehen kann das jeder seine verschiedenen benutzer auch wirklich in der richtigen reihenfolge "anlegt/abspeichert" muss ich das noch irgendwie umgehen ... also ich denk mal die lösung dafür wäre ja das die daten auch wirklich in feste zeilen eingetragen werden müssen ... nur ich weiss leider echt nicht wie ... googel spuckt zwar schon einiges aus aber des hilft mir irgendwie auch nicht ganz weiter ... kann mir jmd helfen??
Edit by tr4st: Verwarnung wegen Threadpushing innerhalb von 2 Tagen!
14. Doppelposts sind zu vermeiden. Außerdem dürfen Threads nur alle 2 Tage gepusht werden. Missachtung kann mit einer verwarnung bestraft werden. |
|
| |
|
 |
|
|