Hej! Här är ett exempel: Hallå igen. Jag stötte på ett nytt problem.Läsa och modifiera textfil.
Jag har en textfil på några hundra rader som skall läsas in i ett affärssystem. Informationen finns i "kolumner" av fast längd. En av kolumnerna innehåller felaktig data och skall bytas ut mot annan information som jag räknar fram som en produkt av två tal, varav det ena finns i textfilen.
Frågan är nu vilka klasser och tillvägagångssätt som är bäst lämpade för dessa. Har tittat på TextWriter och reader-klasserna. Är det kanske bäst att läsa upp hela filen och sedan skriva ner allt med ändrade värden igen i en ny fil? Det känns som om att det är rätt pilligt att redigera en existerande textfil.Sv: Läsa och modifiera textfil.
Function split(ByVal Text As String, ByVal ColumnLengths() As Long) As String()
Dim Start As Long
Dim Index As Long
Dim ColumnLength As Long
Dim Result(ColumnLengths.GetLength(0) - 1) As String
For Each ColumnLength In ColumnLengths
Result(Index) = Text.Substring(Start, ColumnLength)
Index += 1
Start += ColumnLength
Next
Return Result
End Function
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim read As New System.IO.StreamReader("input.txt")
Dim write As New System.IO.StreamWriter("output.txt", False)
Dim Line As String
Dim Columns() As String
Dim ColumnLengths() As Long = {20, 7, 7, 7}
Dim Price As Integer
Dim Count As Integer
Dim Amount As Integer
Line = read.ReadLine()
Do Until Line Is Nothing
Columns = split(Line, ColumnLengths)
Price = Integer.Parse(Columns(1))
Count = Integer.Parse(Columns(2))
Amount = Price * Count
Columns(3) = RSet(Amount, ColumnLengths(3))
Line = String.Join("", Columns)
write.WriteLine(Line)
Line = read.ReadLine()
Loop
write.Flush()
End Sub
Koden klarar inte överflöde. Att du försöker lagra ett värde som är större än columnens bredd.
Sv: Läsa och modifiera textfil.
Om ett fel uppstår i läsningen av filen, vill jag avbryta skrivningen och ta bort den skrivna filen. Problemet är dock att filen är låst av min egen process och därför inte kan tas bort.
Jag bifogar koden nedan. OBS! Koden nedan är förenklad för att det skall vara lättare att förstå mitt problem. Den kan kanske därför te sig något ologisk.
Private Sub FileReaderWriter2()
Try
Dim oReader As System.IO.StreamReader
Dim oWriter As System.IO.StreamWriter
Dim sLine As String
Dim blnError As Boolean
oReader = New System.IO.StreamReader("C:\start.txt")
oWriter = New System.IO.StreamWriter("C:\test.txt")
sLine = oReader.ReadLine()
Do Until sLine = ""
If sLine.Length > 100 Then
blnError = True
Exit Do
End If
oWriter.WriteLine(sLine)
sLine = oReader.ReadLine()
Loop
oWriter.Flush()
oWriter.Close()
oWriter.Dispose()
oReader.Close()
If blnError = True Then
System.IO.File.Delete("C:\test.txt") 'HÄR UPPSTÅR FELET!
End If
Catch ex As Exception
Throw ex
End Try
End Sub