28. september 2009 - 10:01Der er
17 kommentarer og 1 løsning
ÆØÅ forsvinder når jeg skriver til txt fil
Hej eksperter,
Jeg sidder med et problem der virkeligt har givet mig grå hår - har lavet et program der skal lette arbejdsgangen for et par gutter her på arbejder, som i bund og grund går ud på at programmet skal tage de informationer det får at brugeren og skrive én ekstra linje ind på den rigtige plads i en txt fil på ca. 11.000 linje!
den linje der bliver insat indeholder bla. navne.
Det har jeg fundet en løsning på, og det virker perfekt, og dog - får mit program æøå ind i den linje der skal skrives til txt filen - så kommer æøå fint ind i txt filen.
Skriver jeg linjen igen (igen hvor linjen indeholder endten æ ø eller å) så kommer det også fint ind i txt filen - samt dem linje jeg lige har skrevet forinden, også står der unden problemer.
Sammen ligner jeg så den ændrede txt fil(med de 2 nye linjer) med en jeg ikke har skrevet til, så kan jeg se at ALLE linje der er skrevet manuelt ind som indeholder æøå er blevet ændret således at æ,ø eller å er skiftet ud med firkanter og andre tegn.
Fatter det simpelthen ikke..
Min funktioner: Læser hele txt filen ind i et array (med encoding.UTF8) Læser arrayet ind i en collection Finder ud af hvor min linje skal ind Sætter den ind i collectionen skriver collection til txt line by line (med encoding.UTF8) ________________________________________________________
Det er en funktion på 216 linjer - så vil nok være lettere hvis i smider en mail til mig, så vil jeg sende koden til jer på mail, så kommer koden også i farve :)
Håber der er en med tid til et par spørgsmål der vil melde sig ind, på forhånd tak
Et par af de linje der bliver ødelangt, og som er skrevet ind manuelt (de bliver jo så reskrevet af mit program) har erstattet dele af linjen da det ikke er noget der skal ligge på nettet.
Et par af de linjer jeg har skrevet via mit program: løbenummer;afdelingskode;afdeling-By;æøåæøå;f;;æøå;; løbenummer;afdelingskode;afdeling-By;æøåæøå;f;;æøå;;
Den eksisterende fil er garanteret skrevet med ANSI-encoding. Prøv at åbne den med den encoding.
I øvrigt kunne du ikke læse en linie ad gangen og finde ud af hvornår du skal indsætte din linie - eller er du nødt til at læse hele filen ind i memory?
Private Sub DoSomethingWithText() Using inputStream As Stream = File.OpenRead("dinfil.txt") Using reader As TextReader = New StreamReader(inputStream, Encoding.[Default]) Using outputStream As Stream = File.OpenWrite("TempFil.txt") Using writer As TextWriter = New StreamWriter(outputStream) Dim s As String While (s = reader.ReadLine()) <> Nothing If OpfylderBetingelsenForIndsætAfLinie(s) Then writer.WriteLine(DenLinieDerSkalIndsættes) End If writer.WriteLine(s) End While End Using End Using End Using End Using File.Move("dinfil.txt", "dinFil.txt.old") File.Move("TempFil.txt", "dinfil.txt") End Sub
læser hele filen ind i et array med denne linje: Dim arr As String() = File.ReadAllLines(mfil, Encoding.UTF8)
Så læser den jo ind med en encoding - hvis det er hvad ud mener. _______
Man kan sikkert godt nøjes med at finde den enkle linje jeg skal skrive noget ind på - men problemet er at jeg f.eks. vil oprette en ny enhed i ballerup afdelingen, så læser mit program alle linje ind i en collection, og kigger finder så alle linjer der starter med Bal (for ballerup), når den sidste linje er fundet der evt. hedder: Bal0010 (løbenumret) så fjernes Bal og der ligges én oven i 0010 så jeg får 0011.
Da programmet fandt den sidste ballerup entry, så gemte den også positionen i collectionen så jeg kan skrive til linjen lige under.
So - til sidst så skriver mit program en ny linje lige under den sidste ballerup entry med løbenumret Bal0011
Prøv i første omgang at skrifte "Encoding.UTF8" ud med "Encoding.Default".
Kodeeksemplet var mere inspiration, så du ikke behøvede at læse alt ind i hukommelsen for at arbejde med det. Du kan sagtens gøre som du gør - men du kan også forfine mit eksempel, hvis du får tid og lyst. :)
tester lige, men tror jeg har prøvet med default også.
Ellers kan det være jeg skal have lidt hjælp med at få din kode til at virke jo mig - for nu hvor jeg har tilpasset det, så giver det mig en flot blank txt fil ;)
Alle ÆØÅ'er er der endnu og min nye bruger (kalle kanin;;ÆØÅ) står der: Bal0287;afdelingskode;afdelingsby;kalle kanin;fso;;ÆØÅ;;
Linjene der manuelt er skrevet med æøå står også som de skal.
Anden skriv:
Den nye bruger (kalla kanin2;;ÆÆÆ) står der korrekt: Bal0287;afdelingskode;afdelingsby;kalle kanin;fso;;ÆØÅ;; Bal0288;afdelingskode;afdelingsby;kalle kanin2;fso;;ÆÆÆ;;
Alle andre ÆØÅ er smadret, selv den programmet selv har skrevet.
forstår ikke hvordan det kan gå godt første skriv, men ødelægge alt, anden skriv
Læs filen ind: Dim arr As String() = File.ReadAllLines(mfil, Encoding.Default)
' konverter data fra array ind i collection For Each Str As String In arr Col.Add(Str) Next
Skriv filen igen(den gamle slettes først):
Dim sw As StreamWriter = File.CreateText(mfil) For Each str3 As String In Col If (str3 <> vbCrLf Or str3 <> "") Then sw.WriteLine(str3, Encoding.Default) End If Next sw.Close()
Hmm den vil ikke lade mig lave et objekt af stramwriter når jeg har Encoding.Default med som parameter, så den er jeg nød til at bruge nede i for each lykken
'Skriv den nye fil Dim sw As StreamWriter = New StreamWriter(mfil) 'Dim sw As StreamWriter = File.CreateText(mfil) For Each str3 As String In Col If (str3 <> vbCrLf Or str3 <> "") Then sw.WriteLine(str3, Encoding.Default) End If Next sw.Close()
Men har lige prøvet igen, både med .Default og .UTF8 og giver samme resultat
Hmm, heldet er bare ikke med mig for tiden, laver nu en anden fejl med default encoding - istedet for firkanter osv. så laver den spørgsmålstegn (?)
Koden som den ser ud nu:
Dim s As Stream = File.OpenWrite(mfil) Dim sw As TextWriter = New StreamWriter(s, Encoding.UTF8) For Each str3 As String In Col If (str3 <> vbCrLf Or str3 <> "") Then sw.WriteLine(str3) End If Next sw.Close()
Jeg har selv siddet og været frustreret over den måde encoding virker (eller ikke virker) på. Er normalt tilhænger af at bruge en standard-encoding, men lige på windows (og hvis man skal kommunikere med andre programmer!) er det desværre næsten altid Encoding.Default som virker :s
har nemligt også brugt åndsvagt meget tid på det, og når det er hoved delen af mit program, så har jeg intet andet kunne lave mens det har været sat ud :O
Well.. tak for hjælpen! :)
Synes godt om
Ny brugerNybegynder
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.