Avatar billede gider_ikke_mere Nybegynder
16. september 2004 - 12:20 Der er 17 kommentarer og
1 løsning

Rette i lukket fil

Er det muligt at rette i en lukket .txt-fil fra Excel. Jeg skal bare ned i linie 37 og udskifte de 12 første tegn!
Hvis ikke, hvilken metode kan så bruges? F.eks et vbscript som kaldes fra en makro i Excel, henter de 12 tegn i Excel, og udfører udskiftningen i .txt-filen?

eller hvad???
Avatar billede sjap Praktikant
16. september 2004 - 19:08 #1
Det må være noget i den her retning du søger:

Sub UdskriftKarakterer()
Dim strLinie As String
Dim LinieTæller As Integer

    Nytekst = "AbCdEfGhIjKl"
    Close #1, #2
    TexName = InputBox("Angiv tekstfilens navn", "Name", ThisWorkbook.Path & "\AKTest.TXT")
    newFname = "Backup.txt"
    Open ThisWorkbook.Path & "\" & newFname For Output As #2
    Open TexName For Input Access Read As #1
    LinieTæller = 0
    Do While Not EOF(1)
        Line Input #1, strLinie
            LinieTæller = LinieTæller + 1
            If LinieTæller = 12 Then
                strLinie = Nytekst & Right(strLinie, Len(strLinie) - 12)
            End If
        Print #2, strLinie
    Loop
    Close #1, #2
    Kill TexName
    Name newFname As TexName

End Sub
Avatar billede gider_ikke_mere Nybegynder
17. september 2004 - 14:30 #2
Det ser godt ud.
Hver linie består af nøjagtig 20 tegn. i linie 37 skal de første 2 tegn og de sidste 10 tegn ikke røres, altså tegn 3-10 kan rettes (8 tegn).

Min kode ser således ud:

Sub UdskriftKarakterer()
Dim strLinie As String
Dim LinieTæller As Integer

    Nytekst = Range("A1").Value
    Close #1, #2
    TexName = "J:\test.txt"
    newFname = "Backup.txt"
    Open ThisWorkbook.Path & "\" & newFname For Output As #2
    Open TexName For Input Access Read As #1
    LinieTæller = 0
    Do While Not EOF(1)
        Line Input #1, strLinie
            LinieTæller = LinieTæller + 1
            If LinieTæller = 37 Then
                strLinie = Left(strLinie, Len(strLinie) - 18) & Nytekst & Right(strLinie, Len(strLinie) - 10)
            End If
        Print #2, strLinie
    Loop
    Close #1, #2
    Kill TexName
    Name newFname As TexName

End Sub


Det næste problem er at input kan svinge fra 1 til 8 tegn. Hvordan tæller jeg længden af Nytekst? Længden vil jeg plusse efter -10
Avatar billede gider_ikke_mere Nybegynder
17. september 2004 - 14:59 #3
Har den!
NytekstLngd = LEN (Nytekst)
Avatar billede sjap Praktikant
17. september 2004 - 18:36 #4
akyhne -> Har du så fået løst problemet?
Avatar billede gider_ikke_mere Nybegynder
21. september 2004 - 09:36 #5
Undskyld forsinkelsen.
Det virker perfekt! Send lige et svar.
Den færdige kode ser således ud:

Sub UdskriftKarakterer()
Dim strLinie, Nytekst As String
Dim LinieTæller As Integer

    Sti = Range("B1").Value
    Nytekst = Range("B2").Value
    NytekstLngd = Len(Nytekst)
   
    If NytekstLngd < 1 Or NytekstLngd > 8 Then
        Exit Sub
    End If
    NyLngd = 8 - NytekstLngd
    LaegTil = NyLngd
   
    I = 1
    For I = I To LaegTil
        Boble = (Boble & "º")
    Next
   
   
    Close #1, #2
    TexName = (Sti & "TEST.TXT")   
    newFname = "Backup.txt"
    Open ThisWorkbook.Path & "\" & newFname For Output As #2
    Open TexName For Input Access Read As #1
    LinieTæller = 0
    Do While Not EOF(1)
        Line Input #1, strLinie
            LinieTæller = LinieTæller + 1
            If LinieTæller = 37 Then
                strLinie = Left(strLinie, Len(strLinie) - 18) & Nytekst & Boble & Right(strLinie, Len(strLinie) - 10)
            End If
        Print #2, strLinie
    Loop
    Close #1, #2
    Kill TexName
    Name newFname As TexName

End Sub
Avatar billede sjap Praktikant
21. september 2004 - 09:37 #6
Super :0)
Avatar billede gider_ikke_mere Nybegynder
22. september 2004 - 13:48 #7
Programmet der bruger filen jeg retter i melder fejl og siger at filen bruges af et andet program, selv efter reboot! Kopierer jeg en identisk fil med CMD, er der ingen fejl. Hvad går der galt?
En anden fejl jeg har opdaget er at 11 linier længere nede i filen stopper filen! Der skulle være ca. 200 linier ekstra???
Avatar billede gider_ikke_mere Nybegynder
22. september 2004 - 14:43 #8
I denne linie møder koden dette tegn:  som første.
Avatar billede sjap Praktikant
22. september 2004 - 14:55 #9
 kan være hvad som helst (måske EOF?). Prøv evt. at steppe gennem programkoden for at se hvad der sker, og evt. hvorfor det sker ved linie 11.

Jeg kom lige til at se lidt nærmere på din kode. Er der nogen speciel grund til at du bruger kommandoen
  Close #1, #2
INDEN #1 og #2 åbnes?
Avatar billede gider_ikke_mere Nybegynder
22. september 2004 - 18:11 #10
Close #1, #2: Ja da, det skrev du i dit første forslag *GGG*
Nå men det er vel godt nok at sikre sig at filerne er lukkede før de åbnes :-)

 : Alt efter hvor jeg flytter  manuelt i dokumentet, mem kun på første linie, opfattes filen som afsluttet.
Avatar billede sjap Praktikant
22. september 2004 - 18:21 #11
Skal det forstås sådan, at du kan placere  hvor du har lyst til, men kun på første linie afsluttes filen? Eller er det kun hvis  placeres som det første tegn? Oprindeligt var det jo i linie 11, der var problemer.
Avatar billede sjap Praktikant
22. september 2004 - 18:23 #12
Det er lidt en lappeløsning, men måske kan nedenstående få programmet til at fortsætte efter linie 11:

While Not EOF(1) or Linietæller = 11
Avatar billede gider_ikke_mere Nybegynder
22. september 2004 - 18:44 #13
Kun hvis  placeres som det første tegn i en linie. Jeg mener i øvrigt at have set at tegnet bliver brugt til at fortælle hvornår en fil er slut.  står i øvrigt som eneste, og sidste tegn på sidste linie (ca. 300).
Avatar billede sjap Praktikant
22. september 2004 - 18:53 #14
 er blot det tegn som vises, når det egentlige tegn ikke har noget symbol (som f.eks. EOF eller linieskift, carriage return, formfeed osv.). Så  betyder blot at det er et symbol, der ikke vises med det tegnsæt, du aktuelt bruger til visningen - hvis du forstår hvad jeg mener.
Avatar billede sjap Praktikant
22. september 2004 - 19:10 #15
Prøv evt. at se på http://www.asciitable.com/ Det er primært tegnene 0 - 32, der er specialtegn, der ofte ikke vises (f.eks. kan du ikke se tegnet for linieskift, men du kan se at linien skifter)
Avatar billede bak Forsker
22. september 2004 - 20:04 #16
Er du sikker på at der er mere end 11 linier i filen ?
Prøv at åbne den i notepad og slå wordwrap fra.

ellers prøv lige at bruge freefile til at bestemme hvilket filnummer der er ledigt

TexName = (Sti & "TEST.TXT")
    newFname = "Backup.txt"
    fno2 = FreeFile()
    Open ThisWorkbook.Path & "\" & newFname For Output As #fno2
    fno1 = FreeFile()
    Open TexName For Input As #fno1
    LinieTæller = 0
    Do While Not EOF(fno1)
        Line Input #fno1, strLinie
            LinieTæller = LinieTæller + 1
            If LinieTæller = 37 Then
                strLinie = Left(strLinie, Len(strLinie) - 18) & Nytekst & Boble & Right(strLinie, Len(strLinie) - 10)
            End If
        Print #fno2, strLinie
    Loop
    Close #fno1, #fno2
    Kill TexName
    Name newFname As TexName
Avatar billede gider_ikke_mere Nybegynder
23. september 2004 - 08:55 #17
Da jeg har givet point fortsætter jeg her: http://www.eksperten.dk/spm/542740
Avatar billede gider_ikke_mere Nybegynder
23. september 2004 - 09:20 #18
Bak: Hvad skal denne kode gøre? Den laver samme bummert og stopper ved samme linie, linie 37 + 11, altså linie 48. Dette er sidste linie før linien med 
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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