Avatar billede jpi Mester
10. maj 2017 - 11:22 Der er 8 kommentarer og
1 løsning

Gemme tekst med LF i stedet for CRLF

Hej

Jeg benytter denne kode til at gemme noget tekst:

Dim lines() As String
lines = System.IO.File.ReadAllLines(obsFilename)
lines(0) = "XXXXXXXX"
lines(1) = "XXXXXXXX"
System.IO.File.WriteAllLines(obsFilename, lines, System.Text.Encoding.GetEncoding(1252))

Filen der bliver gemt har CrLf i slutningen af hver linie, og jeg skal bruge at den kun har Lf.

Hvordan gør jeg det?
Avatar billede jakobdo Ekspert
10. maj 2017 - 12:04 #1
Loop linjerne.
Og i stedet for writeline, laver du write og tilføjer selv LF i enden ?
Avatar billede jpi Mester
10. maj 2017 - 12:15 #2
Tænker at der må være en mere elegant løsning?
Avatar billede jpi Mester
10. maj 2017 - 14:21 #3
Jeg har nu forsøgt jakobdos forslag og den er MEGET længe om det.

Den oprindelige metode var 2 sekunder om at åbne filen erstatte 2 linier og gemme igen.
Den nye metode, hvor den løber allelinier igennem og erstatter med lf er flere minutter om at køre. der er ca. 75.000 linier i filen.

Er der en bedre metode?
Avatar billede arne_v Ekspert
10. maj 2017 - 15:09 #4
Hvis det er meget langsomt at processe linierne enkeltvist saa bruger du nok for lille buffer!

Baade StreamReader og StreamWriter har constructorer hvor buffer size kan angives.
Avatar billede jpi Mester
10. maj 2017 - 15:35 #5
Tak. Brug af Streamreader og StreamWriter gjorde forskellen. Nu er den lige så hurtig som før og jeg kan benytte objStreamWriter.NewLine = vbLf til at definere hvad der skal benyttes som ny linie.
Avatar billede jakobdo Ekspert
10. maj 2017 - 16:57 #6
Selv tak for hjælpen.
Jeg gætter du ikke brugte noget som helst fra mit "svar". ;)
Avatar billede jpi Mester
10. maj 2017 - 17:07 #7
Jeg prøvede, men det var alt for langsomt og det viste sig at StreamReader var den elegante løsning :)
Avatar billede jakobdo Ekspert
10. maj 2017 - 17:28 #8
Og du looper ikke linjerne ?
Avatar billede jpi Mester
11. maj 2017 - 09:16 #9
Nope. Her er koden jeg bruger nu...

Formålet er at erstatte de første to linier i en fil:

Jeg læser filen, de 2 første linier læses, men gemmes ikke.
Resten gemmes i str

objStreamReader = New StreamReader(obsFilename)
objStreamReader.ReadLine()
objStreamReader.ReadLine()
str = objStreamReader.ReadToEnd
objStreamReader.Close()


Derefter skriver jeg i filen, først de 2 linier jeg har rettet og derefter resten.
objStreamWriter = New StreamWriter(obsFilename)
objStreamWriter.NewLine = vbLf
objStreamWriter.WriteLine("XXXXXX")
objStreamWriter.WriteLine("XXXXXX")
objStreamWriter.Write(str)
objStreamWriter.Close()
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester