Toon posts:

[VB6] Karakters corrupt bij het schrijven naar TXT file

Pagina: 1
Acties:

Verwijderd

Topicstarter
Doelstelling:
De inhoud van een flexgrid schrijven naar een textbestand. Iedere kolom gescheiden met een puntkomma en iedere rij op een nieuwe lijn in het bestand.

Probleem:
Het inlezen van een textbestand naar de flexgrid werkt. Maar het SCHRIJVEN van de aangepaste inhoud van de flexgrid naar nieuw tekstbestand wil maar niet lukken. De tekst in het tekst bestand is onleesbaar.

De code:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
'// 1 rij uitlezen van de flexgrid en schrijven naar het bestand
Dim fso, txtfile
Set fso = CreateObject("Scripting.FileSystemObject")
Set txtfile = fso.CreateTextFile(strPadnaam, True)


  For Y = 0 To intKolom
        FlexGrid.Col = Y
        If Y = 0 Then
            strBuffer = FlexGrid.Text
        Else
            strBuffer = strBuffer & ";" & FlexGrid.Text
        End If
    Next Y

Debug.Print "strbuffer = " & strBuffer
txtfile.Write (strBuffer)


txtfile.Close


Al geprobeerd:
De debug monitor geeft als waarde van strbuffer

strbuffer = ÿþID;English (UNITED KINGDOM) [en_GB];Finnish (FINLAND) [fi_FI];French (FRANCE) [fr_FR];Polish (POLAND) [pl_PL];


strBuffer bevat dus de juiste string.

Doe ik het bestand open, dan krijg ik
䑉䔻杮楬桳⠠乕呉䑅䬠义䑇䵏
敛彮䉇㭝楆湮獩⁨䘨义䅌䑎
晛彩䥆㭝牆湥档⠠剆乁䕃
晛彲剆㭝潐楬桳⠠佐䅌䑎
灛彬䱐㭝਍

Ik heb eerst de oude methode gebruikt
code:
1
2
 Open strPadnaam For Output As #1
    print #1, strbuffer

Via de search heb ik echter de nieuwere methode gevonden; maar met hetzelfde resultaat.
Ik vermoed dat het probleem ligt bij de speciale karakters die ik wil schrijven. Het is dus het print statement die niet overweg kan met deze karakters. Ik moet dus een andere methode gebruiken. Echter geen idee over welke methode ik moet gebruiken.

[ Voor 21% gewijzigd door Verwijderd op 29-09-2005 13:43 ]


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Stop AI Slop

Als je het op de "oude methode" (niks mis mee?) probeert, maar dan het bestand als binair opent?

Dus (owja as #1 mag eigenlijk ook niet:)

Visual Basic:
1
2
3
4
5
6
7
8
Dim lFID
lFID = FreeFile ' Zoek vrij bestandskanaal (standaard altijd 1, maar toch...)

Open strPadnaam For Binary As #lFID

Print #lFID, strBuffer

Close #lFID


Zoiets werkt beter als je vage ascii-tekens gebruikt.

[ Voor 13% gewijzigd door CodeCaster op 29-09-2005 10:06 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Verwijderd

Topicstarter
CodeCaster schreef op donderdag 29 september 2005 @ 10:04:
Als je het op de "oude methode" (niks mis mee?) probeert, maar dan het bestand als binair opent?
t.
Ik krijg een error: "Bad file mode (Error 54)" Waarschijnlijk mag je print niet gebruiken in binary mode? Maar wel put?

EDIT:
met put hetzelfde resultaat
met write heb ik aanhalingstekens rond de string. Wat niet toegelaten is.

[ Voor 18% gewijzigd door Verwijderd op 29-09-2005 10:22 ]


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Stop AI Slop

Euh...

Weet ik niet zeker, maar Write doet soms raar.

Ik had dit probleem met het schrijven van een coderingssysteem, bij bepaalde ascii codes struikelde "for output" over de tekens. Dit was o.a. nummer 27 (escape). Binair openen van het bestand hielp wel.

Probeer het eens, zou ik zeggen, met Put of Write.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 13-01 07:19
De eerste twee tekens in jouw strbuffer zien er uit als ascii 255,254, dit zijn naast twee tekens ook de Byte Order Marker voor een UTF-16 bestand. Jouw inlees programma gaat er dus van uit dat het bestand UTF-16 data bevat, waardoor je speciale tekens krijgt. Geef in je inlees programma de character encoding op die het bestand bevat.

Verwijderd

Topicstarter
_js_ schreef op donderdag 29 september 2005 @ 12:28:
De eerste twee tekens in jouw strbuffer zien er uit als ascii 255,254, dit zijn naast twee tekens ook de Byte Order Marker voor een UTF-16 bestand. Jouw inlees programma gaat er dus van uit dat het bestand UTF-16 data bevat, waardoor je speciale tekens krijgt. Geef in je inlees programma de character encoding op die het bestand bevat.
Dit is de code die ik gebruik om alles in te lezen:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Dim intCounter As Integer
Dim strKarakter As String


    Open strPadnaam For Input As #1
        Seek #1, 1
        
        Do While Not EOF(1)   ' Loop until end of file.
            
            Line Input #1, strRegel
            
            FlexGrid.Col = 0
            
            For intCounter = 1 To Len(strRegel)
                strKarakter = GetCharacter(strRegel, intCounter)
                
                    If strKarakter = ";" Then
                        FlexGrid.Col = FlexGrid.Col + 1
                    Else
                        FlexGrid.Text = FlexGrid.Text & strKarakter
                    End If
            Next intCounter
            
            FlexGrid.Row = FlexGrid.Row + 1
            intRij = intRij + 1
        Loop

   Close #1


Die eerste 2 vreemde karakters worden inderdaad ook ingelezen in mijn flexgrid. Moet ik iets aanpassen aan bovenstaande code om dit te vermijden?

[ Voor 6% gewijzigd door Verwijderd op 29-09-2005 13:43 ]


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Stop AI Slop

Verwijderd schreef op donderdag 29 september 2005 @ 13:26:
Die eerste 2 vreemde karakters worden inderdaad ook ingelezen in mijn flexgrid. Moet ik iets aanpassen aan bovenstaande code om dit te vermijden?
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Dim intCounter As Integer
Dim strKarakter As String


    Open strPadnaam For Input As #1
        Seek #1, 1
        
        Do While Not EOF(1)   ' Loop until end of file.
            
            Line Input #1, strRegel

If intRij = 0 Then 
 If Left(strTegel, 2) = Chr(255) & Chr(254) Then
  strRegel = Right(strRegel, Len(strRegel - 2)
 End If
End If
            FlexGrid.Col = 0
            
            For intCounter = 1 To Len(strRegel)
                strKarakter = GetCharacter(strRegel, intCounter)
                
                    If strKarakter = ";" Then
                        FlexGrid.Col = FlexGrid.Col + 1
                    Else
                        FlexGrid.Text = FlexGrid.Text & strKarakter
                    End If
            Next intCounter
            
            FlexGrid.Row = FlexGrid.Row + 1
            intRij = intRij + 1
        Loop

   Close #1


Denk ik?

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Verwijderd

Topicstarter
Zal ik straks proberen ;) Ik doelde meer op een andere manier om mijn bestand in te lezen ipv de karakters eruit te filteren?

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Stop AI Slop

Ok, maar aan de manier van lezen te zien open je gewoon een CSV bestand?

Dan horen die tekens er helemaal niet in...

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Verwijderd

Topicstarter
Ik heb het programma aangepast met door de karakters te filteren. Nu blijkt alles voorlopig te werken :)
Pagina: 1