16. september 2004 - 12:20Der 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?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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
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
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
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???
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.
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).
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.
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)
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
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
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.