Jump to content

vb.net Dateien auslesen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo @ all!

 

Versuche gerade mit folgendem Script Dateien aus einem fest hinterlegten Pfad auszulesen die eine bestimmte Zahl als Inhalt aufweisen und diese dann in einen fest hinterlegten Pfad zu verschieben.

 

Imports System.IO

Module Module1

 

Sub Main()

 

 

'Pfadangabe

Dim strDateiName As String = "C:\test\*.txt"

 

' StreamReader erzeugen und Stream angeben, der verwendet werden soll

Dim reader As New StreamReader(strDateiName)

 

 

'Eine Zeile auslesen

Dim sLine As String = reader.ReadLine

 

 

'Inhalt zum lesen

Dim strWert As String = "4040239000002"

 

 

If strWert = True Then

File.Move("", "C:\verschoben\")

 

 

Else

strWert = "nicht vorhanden"

End If

 

 

End Sub

 

End Module

 

Leider komme ich nun nicht mehr weiter. Es kommt in der Zeile

 

Dim reader As New StreamReader(strDateiName)

 

immer ein Fehler den ich nicht zuordnen kann. Vielleicht hat ja jemand einen Tipp. Bin vb.net anfänger :)

Link zu diesem Kommentar

'Inhalt zum lesen
Dim strWert As String = "4040239000002"


If strWert = True Then
File.Move("", "C:\verschoben\")

 

hier wird wohl der Fehler liegen.

 

In der ersten Zeile definierst du die Variable "strWert" als einen String vergleichst ihn ein paar Zeilen später mit einem Wert vom Typ Boolean. Das Geht so nicht, denn .net ist Typensicher. Wenn du prüfen möchtest ob in dem Strring was drin ist, solltest du das so machen:

 

if strWert <> "" then
File.Move("", "C:\verschoben\")
end if

 

oder wenn du einen bestimmten wert hast:

 

if strWert = "GanzTollerWert" then
File.Move("", "C:\verschoben\")
end if

 

ausserdem nutzt du die Move methode falsch. Der erste Parameter ist leer, woher soll die Methode wissen welche Datei verschoben werden soll?

 

Dann dürfte noch die Angabe der Quelldatei falsch sein:

 

Dim strDateiName As String = "C:\test\*.txt"

 

das ist kein gültiger Dateiname. deswegen wirst du dort auch nix lesen oder schreiben können.

Link zu diesem Kommentar

Vielen Dank erstmal. Habe nun die ganze Sache nochmal überarbeitet:

 

Dim strWert As Integer

Dim File, Files() As FileInfo

Dim Dir As New DirectoryInfo("C:\test\")

Files = Dir.GetFiles("*.txt")

 

 

For Each File In Files

 

Using sr As StreamReader = New StreamReader(File.FullName)

Dim line As String

line = sr.ReadLine()

 

strWert = InStr(line, "4040239000002")

 

If Right$(line, 13) = "4040239000002" Then

 

File.MoveTo("C:\verschoben")

Else

MsgBox("nein")

 

End If

End Using

Next

 

Leider hänge ich nun noch beim verschieben. Muss die Datei nur noch geschlossen werden oder warum mag er mir diese nicht verschieben. Noch ein kleiner Tipp?

Link zu diesem Kommentar

Mach doch mal'n "sr.close()" vor den Move.

 

Zwei Dinge wären da aber noch:

Ist dieser String, den du da suchst, grundsätzlich in der ersten Zeile? Du liest nämlich nur eine Zeile ein!

Ansonsten mit "Do"... "Loop until line is Nothing" durch die kpl. Datei.

 

Weiterhin: Für was ist

strWert = InStr(line, "4040239000002")

mit drin? Ne Integervariable mit Präfix str ist übrigens... unüblich ;)

Link zu diesem Kommentar

Ja, ersoll nur die erste Zeile auslesen, da in dieser immer dieser Wert auftaucht.

Beim verschieben hapert es noch ein bissl. Er verschiebt es mir nur wenn ich als Beispiel

 

If Right$(line, 13) = "4040239000002" Then

sr.Close()

 

File.MoveTo("C:\verschoben\test.inh")

 

test.inh eingebe. Ich möchte aber den originalen Dateinamen beibehalten, da durchaus mehrere Dateien in dem ursprungsverzeichnis verschoben werden müssen.

Link zu diesem Kommentar

Vielen Dank Cybquest! Habe es nun folgendermaßen gelöst:

 

Const absender = "emailabsender"

Const empfaenger = "emailempfänger"

 

Sub Main()

Dim betreff As String = "betreff"

Dim nachricht As String = "text"

Dim File, Files() As FileInfo

Dim Dir As New DirectoryInfo("C:\test\")

Files = Dir.GetFiles("*.inh")

 

 

For Each File In Files

 

Using sr As StreamReader = New StreamReader(File.FullName)

Dim line As String

line = sr.ReadLine()

 

If Right$(line, 13) = "4040239000002" Then

sr.Close()

File.MoveTo("C:\verschoben\" & File.Name)

 

 

Dim myClient As New Net.Mail.SmtpClient()

myClient.Host = "smtpserver"

myClient.Send(absender, empfaenger, betreff, nachricht)

 

End If

End Using

Next

 

End Sub

 

Vielen Dank nochmal.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...