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 -> [VB.NET] Fragen - Antworten
Autor
Nachricht
markoh
Newbie
Newbie

Anmeldedatum: 17.03.2011
Beiträge: 6

Newbie braucht Hilfe beim Einlesen von Dateien
Verfasst am: 17.03.2011, 11:57

Hallo,

ich bin totaler Newbie was die Programmierung angeht, möchte jetzt aber damit mal anfangen.

Und zwar möchte ich gern aus einer Datei die Settings.ini heißt bestimmte Zeilen auslesen. Die Zeilen beginnen mit

File =
und
Parameter =

ich benötige quasi das was nach dem = kommt. Die Zeilen stehen ziemlich am Ende der Datei, der ganz "mist" am Anfang interessiert mich garnicht.

Den Inhalt dieser Zeilen möchte ich in andere andere Datei schreiben, z.B. temp.txt

Ich hoffe mir kann jemand helfen und bedanke mich schonmal im Voraus.

LG

MarkOH
 
Tyrannmisu
Newbie
Newbie

Anmeldedatum: 17.03.2011
Beiträge: 8


Verfasst am: 17.03.2011, 13:24

Also, was du vorhast ist garnicht so schwierig, eine Datei komplett auslesen kannst du so:

Code:

        'Wir deklarieren uns erstmal ein paar Variablen
        Dim Setting1 As String
        Dim Setting2 As String

        Dim fs As IO.FileStream = New IO.FileStream( _
                      "Settings.ini", IO.FileMode.Open, _
                      IO.FileAccess.Read)
        Dim w As IO.StreamReader = New IO.StreamReader(fs)
        Dim Var1 As String = w.ReadToEnd 'Die Datei komplett einlesen


        'Wenn das fertig ist, den Filestream und den reader wieder schließen
        w.Close()
        fs.Close()


Jetzt müssen wir nach deinen Zeilen suchen:

Code:

 'Wir erstellen ein Array aus allen Zeilen, indem wir den String an jeder neuen Zeile splitten
        Dim loadarray As Array = Var1.Split(New String() {System.Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)

        'Jetzt müssen wir jede Zeile durchgehen:
        Dim temp As String
        For Each temp In loadarray 'Eine Schleife, die jedes Elemet im Array durchgeht

            If temp.Remove(5, temp.Length) = "File =" Then 'Wenn die 5 ersten Zeichen der ausgelesenen Zeile deinen Suchbegriff ergeben dann:
                Setting1 = temp.Remove(0, Var1.LastIndexOf("=") + 1) ' Entfernen wir alles bis einschließlich dem = und übergeben den Wert Setting1
            End If

            'das gleiche nochmal für deinen zweiten Wert
            If temp.Remove(10, temp.Length) = "Parameter =" Then
                Setting2 = temp.Remove(0, Var1.LastIndexOf("=") + 1)
            End If
        Next


So jetzt müssen wir die Variablen nur noch in eine neue Datei schreiben:
Code:

Dim ws As FileStream = New FileStream( _
        "temp.txt", FileMode.OpenOrCreate, _
        FileAccess.Write)
        ' --- Stream öffnen
        Dim wr As StreamWriter = New StreamWriter(ws)
        wr.WriteLine(Setting1) 'schreibt die erste zeile
        wr.WriteLine(Setting2) 'schreibt die zweite Zeile
        '...

        'Dann wieder Stream und Reader schließen
        wr.Close()
        ws.Close()
    End Sub


So Smile hab jetzt alles frei Schnauze hier so reingeschrieben, hoffe aber, dass ich keine Fehler gemacht hab Very Happy


Zuletzt bearbeitet von Tyrannmisu am 17.03.2011, 14:12, insgesamt 2-mal bearbeitet
 
markoh
Newbie
Newbie

Anmeldedatum: 17.03.2011
Beiträge: 6


Verfasst am: 17.03.2011, 14:08

Hallo Tyran,

erstmal danke für die schnelle Hilfe aber scheinbar sind 2 Fehler drin

"length" ist kein Member von "String"
"Var1LastIndexOf" wurde nicht deklariert.

Wo und was muss ändern?

LG MarkOH
 
Tyrannmisu
Newbie
Newbie

Anmeldedatum: 17.03.2011
Beiträge: 8


Verfasst am: 17.03.2011, 14:14

markoh hat Folgendes geschrieben:
Hallo Tyran,

erstmal danke für die schnelle Hilfe aber scheinbar sind 2 Fehler drin

"length" ist kein Member von "String"
"Var1LastIndexOf" wurde nicht deklariert.

Wo und was muss ändern?

LG MarkOH


Sry da waren ein paar Tippfehler drinn, habs nochmal editiert kannst es wieder versuchen.

Achso und du musst, um Dateien einlesen zu können erst noch die Methode importieren, also diese Zeile noch vor
"Public Class..." einfügen

Code:

Imports System.IO.File
 
markoh
Newbie
Newbie

Anmeldedatum: 17.03.2011
Beiträge: 6


Verfasst am: 17.03.2011, 14:28

Funktioniert leider noch nicht

Ich gebe dir mal den Inhalt der Settings.ini von dem Bereich der für mich interessant ist:


[File1]
File = WindowsXP-KB2479943-x86-DEU.exe
Parameters = /quiet /norestart
Name = MS11-015: Sicherheitsanfälligkeiten in Windows Media Runtime können Remotecodeausführung ermöglichen
Link = http://support.microsoft.com/?scid=kb;de;KB2510030
Logfile = KB2510030.log
Restart =

[File2]
File = WindowsXP-KB2483618-x86-DEU.exe
Parameters = /quiet /norestart
Name = MS11-017: Sicherheitsanfälligkeit in Remotedesktopclient kann Remotecodeausführung ermöglichen
Link = http://support.microsoft.com/?scid=kb;de;KB2508062
Logfile = KB2508062.log
Restart =

[File3]
File = WindowsXP-KB2481109-x86-DEU.exe
Parameters = /quiet /norestart
Name = MS11-017: Sicherheitsanfälligkeit in Remotedesktopclient kann Remotecodeausführung ermöglichen
Link = http://support.microsoft.com/?scid=kb;de;KB2481109
Logfile = KB2481109.log
Restart =

[File4]
File = WindowsXP-KB2483614-x86-DEU.exe
Parameters = /quiet /norestart
Name = MS11-017: Sicherheitsanfälligkeit in Remotedesktopclient kann Remotecodeausführung ermöglichen
Link = http://support.microsoft.com/?scid=kb;de;KB2483614
Logfile = KB2483614.log
Restart =


Beim ausführen des Programms bekomm ich ein ArgumentOutOfRangeException und zwar hier

Code:
If temp.Remove(5, temp.Length) = "File =" Then


ich nehme an an der Zeile mit Parameter wird das Problem dann nochmal auftreten.

Den Import der Methode hatte ich schon drin.
 
Tyrannmisu
Newbie
Newbie

Anmeldedatum: 17.03.2011
Beiträge: 8


Verfasst am: 17.03.2011, 14:36

markoh hat Folgendes geschrieben:


Beim ausführen des Programms bekomm ich ein ArgumentOutOfRangeException und zwar hier

Code:
If temp.Remove(5, temp.Length) = "File =" Then


ich nehme an an der Zeile mit Parameter wird das Problem dann nochmal auftreten.

Den Import der Methode hatte ich schon drin.


Ja genau sowas passiert mir immer wenn ich was frei Schnauze schreibe Very Happy
Der remove Aufruf ist ja Nullbasieren, die Zählung fängt also so an :0,1,2,3,...
Bei Length wiederum nicht, also siehts so aus: 1,2,3,...

Musst also in beiden Zeilen den Code so ändern:
Code:
If temp.Remove(5, temp.Length-1) = "File =" Then


Aber so wie es jetzt ist werden natürlich nur die Werte von File4 in die neue Datei geschrieben, kannst aber das Schreiben der Datei gleich in die Suchschleife mit reinpacken dann schreibt er es jedesmal wenn er den entsprechenden Begriff findet.
Oder das schreiben in einen eigenen Sub und ihn dann in der Suchschleife aufrufen und als Parameter den zu schreibenen Wert übergeben.
 
markoh
Newbie
Newbie

Anmeldedatum: 17.03.2011
Beiträge: 6


Verfasst am: 17.03.2011, 14:42

Sorry der Fehler ist immernoch da Embarassed
 
Tyrannmisu
Newbie
Newbie

Anmeldedatum: 17.03.2011
Beiträge: 8


Verfasst am: 17.03.2011, 14:48

markoh hat Folgendes geschrieben:
Sorry der Fehler ist immernoch da Embarassed


Mh ich werde es gleich selbst nochmal testen, muss vorher etwas anderes machen, hab also kurz Geduld Wink
 
markoh
Newbie
Newbie

Anmeldedatum: 17.03.2011
Beiträge: 6


Verfasst am: 17.03.2011, 14:50

Kein Ding, lass dir Zeit, wenns nicht heute wird, auch nicht schlimm, das Ziel ist der Weg Wink
 
Tyrannmisu
Newbie
Newbie

Anmeldedatum: 17.03.2011
Beiträge: 8


Verfasst am: 17.03.2011, 15:25

So Entschuldigung nochmal hab da vorhin ein wenig Unsinn verzapft und zu wenig nachgedacht Very Happy

Hier nun der Codeteil Fehlerfrei:
Code:

        For Each temp In loadarray 'Eine Schleife, die jedes Elemet im Array durchgeht
            If temp.Length > 6 Then
                If temp.Remove(6, (temp.Length - 6)) = "File =" Then 'Wenn die 5 ersten Zeichen der ausgelesenen Zeile deinen Suchbegriff ergeben dann:
                    Setting1 = temp.Remove(0, temp.LastIndexOf("=") + 1) ' Entfernen wir alles bis einschließlich dem = und übergeben den Wert Setting1
                End If
            End If
            If temp.Length > 12 Then
                'das gleiche nochmal für deinen zweiten Wert
                If temp.Remove(12, (temp.Length - 12)) = "Parameters =" Then
                    Setting2 = temp.Remove(0, temp.LastIndexOf("=") + 1)
                End If
            End If
        Next


Erst mal sind jetzt noch Abfragen da, welche überprüfen ob der Code die mindestlänge hat bevor wir darann rumschnipseln, dann muss man beim remove natürlich bedenken, dass wenn wir von Zeichen 6 anfangen man auch die Gesamtlänge -6 nehmen muss und nicht -1 um alles ab zeichen 6 zu löschen.
Außerdem hatte ich vergessen Var1 durch temp zu ersetzten, nachdem ich den Code das erste mal umgeschrieben hab.

Kommt davon wenn man versucht etwas nebenbei zu machen wenn man selber grad an was anderem programmiert Very Happy

wie gesagt jetzt werden nur die letzten beiden Vorkommen deiner Suche geschrieben, aber versuchs erst mal selber so umzubauen, dass er alle schreibt. Wenns nicht klappt melde dich nochmal, ist eig ganz einfach.
 
markoh
Newbie
Newbie

Anmeldedatum: 17.03.2011
Beiträge: 6


Verfasst am: 17.03.2011, 15:45

Wenn das Script erstmal so läuft, werde ich dann mal versuchen es in die Schleife einzuarbeiten, dass alle File behandelt werden, aber erstmal muss das Script laufen.

Leider tut es das noch nicht, habe hier noch einen Fehler bekommen:

Code:
If temp.Length > 12 Then


Den ersten Teil macht er mit der File,aber den Bereich Parameter mag er nicht, da gibts ein NullReferenzException
 
Tyrannmisu
Newbie
Newbie

Anmeldedatum: 17.03.2011
Beiträge: 8


Verfasst am: 17.03.2011, 15:56


Also ich hab den Code grade nochmal 1 zu 1 wie ich ihn hier gepostet hab bei mir reinkopiert und er läuft ohne Fehler durch...


Ich kann dir ja nochmal alles komplett posten, so gehts jedenfalls bei mir:


Code:

        Dim fs As IO.FileStream = New IO.FileStream( _
                      "Settings.ini", IO.FileMode.Open, _
                      IO.FileAccess.Read)
        Dim w As IO.StreamReader = New IO.StreamReader(fs)
        Dim Var1 As String = w.ReadToEnd 'Die Datei komplett einlesen


        'Wenn das fertig ist, den Filestream und den reader wieder schließen
        w.Close()
        fs.Close()

        'Wir erstellen ein Array aus allen Zeilen, indem wir den String an jeder neuen Zeile splitten
        Dim loadarray As Array = Var1.Split(New String() {System.Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
        Dim temp As String


        'Jetzt müssen wir jede Zeile durchgehen:

        For Each temp In loadarray 'Eine Schleife, die jedes Elemet im Array durchgeht
            If temp.Length > 6 Then
                If temp.Remove(6, (temp.Length - 6)) = "File =" Then 'Wenn die 5 ersten Zeichen der ausgelesenen Zeile deinen Suchbegriff ergeben dann:
                    Setting1 = temp.Remove(0, temp.LastIndexOf("=") + 1) ' Entfernen wir alles bis einschließlich dem = und übergeben den Wert Setting1
                End If
            End If
            If temp.Length > 12 Then
                'das gleiche nochmal für deinen zweiten Wert
                If temp.Remove(12, (temp.Length - 12)) = "Parameters =" Then
                    Setting2 = temp.Remove(0, temp.LastIndexOf("=") + 1)
                End If
            End If
        Next

        Dim ws As FileStream = New FileStream( _
        "temp.txt", FileMode.OpenOrCreate, _
        FileAccess.Write)
        ' --- Stream öffnen
        Dim wr As StreamWriter = New StreamWriter(ws)
        wr.WriteLine(Setting1) 'schreibt die erste zeile
        wr.WriteLine(Setting2) 'schreibt die zweite Zeile
        '...

        'Dann wieder Stream und Reader schließen
        wr.Close()
        ws.Close()
    End Sub


Zum Testen hab ich in die Settings.ini das geschrieben, was du mir weiter oben gepostet hattest und er erstellt mir auch jedesmal brav die temp.txt mit den letzten 2 Werten.

Ich habe das jetzt durch einen Button auslösen lassen und die beiden Variablen global deklariert, also
Code:

 Dim Setting1 As String
Dim Setting2 As String

direkt nach
Code:
Public Class Form1
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB.NET] Fragen - Antworten
 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Wichtig: Filebrowser z.B. für ein RAT 2206 13.01.2008, 12:14
Keine neuen Beiträge msgbox mit symbol _&_ z.B. yesno oder systemmodal 1156 27.09.2008, 00:16
Keine neuen Beiträge Abändern eines Ordnernamens (z.B. C:\Programme = Programme) 1294 23.04.2008, 16:33
Keine neuen Beiträge "Zurück-Funktion" mit Listview und z.B. DirView 823 17.04.2008, 14:30
Keine neuen Beiträge Fenster auslesen z.b von icq oder msn wer online kommt 1336 11.02.2008, 17:46
 


[ Time: 0.1264s ][ Queries: 113 (0.0689s) ][ GZIP on - Debug on ]