Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten
Autor
Nachricht
exe23_
Tutorial Leser
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
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 »<b><font color=green>« Moderator »</font



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
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
Coder

Anmeldedatum: 09.02.2008
Beiträge: 89


Verfasst am: 11.03.2008, 20:14

komplizierter gehts ja garnet
 
c0re_
« Moderator »<b><font color=green>« Moderator »</font



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
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
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
Ü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
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.
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten

Tags: bestimmte zeile, auslesen, ini

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Problem mit einem Makro in excel! bitte helfen! 344 15.03.2011, 10:18
Keine neuen Beiträge Könnt ihr mir beim Programmieren helfen?Bitte helft mir 424 10.08.2004, 12:23
Keine neuen Beiträge Könnt ihr mir beim Programmieren helfen Bitte helft mir 354 03.08.2004, 13:56
Keine neuen Beiträge ActiveX User Control (Bitte helfen)??? 530 08.09.2003, 13:21
Keine neuen Beiträge Ganzen Ordner hochladen? (msinet.ocx) 1040 05.11.2007, 02:53
 


[ Time: 0.1695s ][ Queries: 109 (0.0734s) ][ GZIP on - Debug on ]