pfeffis 11 Geschrieben 18. Dezember 2008 Melden Teilen Geschrieben 18. Dezember 2008 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 :) Zitieren Link zu diesem Kommentar
Zearom 10 Geschrieben 18. Dezember 2008 Melden Teilen Geschrieben 18. Dezember 2008 '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. Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 18. Dezember 2008 Melden Teilen Geschrieben 18. Dezember 2008 Vielleicht hilft das weiter: Gewusst wie: Lesen aus einer Textdatei Gruß, Frank Zitieren Link zu diesem Kommentar
pfeffis 11 Geschrieben 18. Dezember 2008 Autor Melden Teilen Geschrieben 18. Dezember 2008 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? Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 18. Dezember 2008 Melden Teilen Geschrieben 18. Dezember 2008 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 ;) Zitieren Link zu diesem Kommentar
pfeffis 11 Geschrieben 18. Dezember 2008 Autor Melden Teilen Geschrieben 18. Dezember 2008 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. Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 18. Dezember 2008 Melden Teilen Geschrieben 18. Dezember 2008 Mach doch'n File.MoveTo("C:\verschoben\" & File.Name) draus Zitieren Link zu diesem Kommentar
pfeffis 11 Geschrieben 18. Dezember 2008 Autor Melden Teilen Geschrieben 18. Dezember 2008 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. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.