Avatar billede tolveren Nybegynder
14. juli 2009 - 12:35 Der er 12 kommentarer

Gennemløbe txt.fil og søge hver 15. linjeskift og erstatte med særlig tegn

Hvordan gennemløber man i Visual Basic en stor txt.fil som skal redigeres. Jeg skal fínde hver 15.linjeskift og erstatte med særlig tegn. Jeg kan ikke anvende søg og erstat i min editor, da filen fylder 300 megabyte. Editoren går død med den macro som jeg ellers havde lavet. Håber der er en derude som kaN HJÆLPE mig.
Avatar billede supertekst Ekspert
14. juli 2009 - 13:07 #1
Via VBA ville det nok kunne lade sig gøre ved at indlæse en linie ad gangen, teste for 15. linjeskift og skrive i en ny fil. Men det kan komme an på en prøve.

Du er velkommen til at sende et MINDRE uddrag af din fil  - så skal jeg gerne forsøge. Mail-adresse under profil.
Avatar billede tolveren Nybegynder
14. juli 2009 - 13:13 #2
Ja det kan lade sig gøre, men mit problem ligger i at når der tælles linjeskift i teksten, så skal der læses i f eks både linje 1 , 2 og 3 til 15.
Avatar billede tolveren Nybegynder
14. juli 2009 - 13:16 #3
Egentlig er det ikke linjeskift der ledes efter, men 15 stk kolonneadskillere. Problemet er at der i teksten i kolonne 14 er includeret linjeskift som ikke vedrører det korrekte linjeskift.
Avatar billede tolveren Nybegynder
14. juli 2009 - 13:24 #4
Eksempel på tekst i filen:
Idnr;Kunde;Saldo;Felt4;Felt5;Felt6;Felt7;osv
12;Peter;100kr;felt4tekst;felt5tekst;Felt6tekst
NyLinje
NyLinje
NyLinje
NyLinje;NyLinje (linjen indeholder for mange linjebreaks)
13;Niels;200kr;Felt4tekst;felt5tekst;Felt6tekst;Felt7;(linjen OK)
Avatar billede supertekst Ekspert
14. juli 2009 - 13:26 #5
Dine kommentarer:

ad 1)
Man kunne vel gemme et antal linier indtil "15. linie" i en eller anden struktur.

ad 2)
Hvis den pågældende kode er entydig - så det vel være muligt.

Måske villedet være nemme med det nævnte uddrag samt en udpegning/påvisning af det ønskede.
Avatar billede tolveren Nybegynder
14. juli 2009 - 13:39 #6
Jeg havde tænkt på genneløbe filen tegn for tegn og optælle antallet af linjeskift og replace nr 15 med et særligt tegn og der efter forsætte tegnlæsningen påny. Tilsidst ville jeg slette alle linjeskift i filen. Derefter replace det indsatte særlige tegn med et korrekt linjeskift. Så burde filen være til at indlæse i min database.
Avatar billede supertekst Ekspert
14. juli 2009 - 13:47 #7
Ja - så prøv dette..
Avatar billede tolveren Nybegynder
14. juli 2009 - 13:52 #8
Ja, men hvordan gør man det ????
Avatar billede supertekst Ekspert
14. juli 2009 - 15:23 #9
Et udgangspunkt:

Sub behandlingAfTextFil()
Dim tegn As String, linie As String

Const inddataFilnavn = "C:\inddata.txt"        'kan justeres
Const uddataFilnavn = "C:\uddata.txt"          '-"-


Rem Outputfil
    Open sti & uddataFilnavn For Output As #2

Rem InputFil
    Open sti & inddataFilnavn For Input As #1
   
    While Not EOF(1)
        tegn = Input(1, #1)

'...
Rem test test overfør til linie - udskriv når linien er opbygget
'...

        Print #2, linie
       
    Wend
    Close #1
    Close #2
End Sub
Avatar billede tolveren Nybegynder
15. juli 2009 - 14:34 #10
Function convert()

        Dim starttid3, i3, j3, Finish3, sekunder3, ss3
        starttid3 = Timer 'tidsmåling i sekunder starter
    Dim Streng1, Streng2, Linie2, linie, Filex, Filey, tegn, tegn2 As String
    Dim antal, Optael As Integer
   
    Filex = file1.Text
   
    'Streng1 = ord1.Text
    'Streng2 = ord2.Text
       
    Filey = file2.Text
       
    Open Filex For Input As #8
    Open Filey For Output As #9   
   
   
    While Not EOF(8)
       
        tegn = Input(1, #8)

        If tegn <> "ÿ" Then
        Print #9, tegn
        GoTo bunden:
       
        End If
       
            antal = antal + 1
           
            If antal > 14 Then
            'Instr(1,"hhh","ÿ")
            tegn = Replace(tegn, "ÿ", "    ÿ" + Chr(254))
            Print #9, tegn
            antal = 1
            Else
            Print #9, tegn
           
            End If
       
'....
bunden:
    Wend
    Close #8
    Close #9     
            ' tidsmåling - start ligger i toppen
            For i3 = 1 To 1000
            j3 = i3 * i3
            Next i3
            Finish3 = Timer
            sekunder3 = Finish3 - starttid3
            MsgBox "Det tog " & sekunder3 & " sekunder at gennemføre programmet"
            ' tidsmåling slut
           
    MsgBox "Programmet er afsluttet og filen er gemt på: " & file2 & ""
    ss3 = "explorer " & file2 & ""  ' åbner kataloget og filen i fil2
    Shell ss3, vbNormalFocus 'sætter den åbne fil forrest i applicationen
            '  skriv evt  vbMaximizedFocus   
End Function
Avatar billede tolveren Nybegynder
15. juli 2009 - 14:39 #11
Det er nu lykkedes mig at gennemløbe filen tegn for tegn, men outputtet står under hinanden i output-filen. Jeg tæller de første 15 y-umlautter og erstatter med y-umlaut samt Chr(254). Jeg ville egentlig gerne kunne gå 8 tegn tilbage i filen og erstatte med y-umlaut samt Chr(254). Har du en ide mere ? Tak indtil videre.
Avatar billede supertekst Ekspert
15. juli 2009 - 14:46 #12
Der skal nok opbygges i det jeg benævner "Linie" - inden der skrives til uddata-filen
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
Kategori
Kurser inden for grundlæggende programmering

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