Hallå Gå igenom din lista med en for sats istället så kan du enkelt gå tillbaka en rad eller flera. För jag antar att det är raden innan och framåt du vill ta bort? Hej Niclas och tack för ditt svar! Hej! Läs in filen i en lista där varje rad är en post Hmm det där ser ju inte alls illa ut! Aldrig använt streamreader förut, men sett at den finns. Såg att min post ligger lite fel, då det är VB6 jag sitter med, hoppas det inte påverkar ditt kod exempel? Skulle bara nämna att jag löste min rad editering av textfil genom att loopa igenom textfilen, spara rad för rad i en sträng, sedan när man når den valda raden, spara unden det i en annan sträng. Sedan fortsätta loopen till EOF och spara till en tredje sträng. Editera och slutligen sätta ihop strängarna och spara ner till filen igen.Stränghantering!
Jag skulle vilja ha lite råd/tips på hur jag på ett smidigt sätt hanterar och i mitt fall raderar information i en txt fil.
txt-filen är en stor logg fil som skapas varje månad enligt följande syntax:
23/06/2008 13:55:25 -
Some text that will tell the status from the batch and are listed bellow:
ASNRO : 111111
NIMI : Text
LASKUNRO : 12345678
LASKURIVI_HUOM : 123456 AAAAA0000123456 000003781960
RIVISUMMA : 1.1
VEL_HYV : D
Logg filen är väldigt stor ca 12000 rader och jag vill nu snurra igenom denna och ta bort information såsom före och efter om logg meddelandet har en viss text. Dvs om logg texten är enligt ovan:
Some text that will tell the status from the batch and are listed bellow:
så vill jag radera infomation såsom datumet före meddelandet samt all övrig information.
Jag har har lyckats knåpat ihop följande:
Dim FindText As String = "Some text that will tell the status from the batch and are listed bellow"
Dim ThisText As String = ""
ThisText = My.Computer.FileSystem.ReadAllText("C:\temp\myfile.txt")
Dim pos As Integer = ThisText.IndexOf(FindText)
Do While pos <> -1
ThisText = ThisText.Remove(pos, FindText.Length)
pos = ThisText.IndexOf(FindText)
Loop
My.Computer.FileSystem.WriteAllText("C:\temp\myfile_with_deleted_rows.txt", ThisText, False)
MsgBox("Information in file deleted")
Fungerar ju fint , men tar ju bara bort den information som jag säger till om dvs:
"Some text that will tell the status from the batch and are listed bellow"
Men som sagt är jag ute efter att även radera information före och efter!
Tack på förhand!
Mvh,
Thomas
Sv: Stränghantering!
Det absolut bästa hade varit att använda Regular expressions.Sv:Stränghantering!
Precis som du säger så vill jag tabort information före och efter.
Ska kika lite på ditt förslag men om du har ti/lust så får du gärna ge ett exempel på hur du menar.
Tack på förhand!
Mvh,
ThomasSv: Stränghantering!
Jag kommer tyvärr inte med svar, utan en egen fråga. :)
jag tyckte jag håller mig hyffsat "on topic" med min lilla fråga.
Det är så att jag programmerar ett litet spel som min far efterfrågade. Då det är många snabba och små banor, tog jag mig tiden att skapa en karteditor som skapar en textfil med data som används vid uppbyggnad av banorna. Denna text fil ser snarlik ut som exemplet här nedan:
001110001011001111 000111000011 001111110
000011100111001111 000111001111 001100010
011100000011001111 001100001111 001110010
110011100000001111 000110000011 001001110
000011000011001111 000110001111 001100010
och så vidare. Varje rad är en bana, så i exemplet här ovan har jag data för de fem första banorna. Allt fungerar så långt, men för att göra det svårt för mig fixade jag så att man i editorn kan stega fram och tillbaka mellan banorna, så då ritas upp så som jag skapade dom. Mitt problem kommer när jag inser att om man ska kunna stega fram och tillbaka, så måste man ju självklart också kunna editera banan man för tillfället har valt in. Jag har läst lite om att redigera vissa rader i en textfil, och insett att det inte gör sig i en handvändning. Jag antar att jag behöver använda Line input i en loop, som stegar från början av programmet till den valda banan, medans all data läggs in en variabel. Sedan måste man väl antagligen ha en andra variabel för att spara undan allt som kommer efter den valda banan?
frågan är: Hur återskapar jag textfilen efter ändringarna, och hur mycket kan jag spara i en string?
självklart är ju allmänna funderingar och tips välkomna också.. ;) Vill helst inte kladda för mycket i mitt program, som trots allt fungerar bra så långt! :)
tacksam för svar!
Sv:Stränghantering!
<code=vb>
Dim banor as New List(of String)
Using sr As New StreamReader("banor.txt")
Dim line As String
line = sr.ReadLine()
Do While Not line is Nothing
banor.Add(line)
line = sr.ReadLine()
Loop
End Using
</code>
Sen är det bara att skriva hela listan till textfilen igen när du redigerat klart.
<code=vb>
Using sw As New StreamWriter("banor.txt", false)
For Each line As String In banor
sw.WriteLine(line)
Next line
End Using
</code>Sv: Stränghantering!
En fundering bara, den här listan, är det en list box, eller en lista sparad i minnet?
Inget som behövs deklareras innan användning av streamreader?
En annan fråga, som tyvärr är helt off topic:
Efter installation av VB6 på en vista maskin, så går object viewern otroligt långsamt. Att flytta t.ex en label tar evigheter, och är så tungt så grafiken för att rita ut label outlinen har problem at rita rätt överhuvudtaget? Eftersom totalt off topic, alla svar är helt frivilliga.. ;)Sv: Stränghantering!