Avatar billede horus Nybegynder
15. februar 2001 - 08:50 Der er 14 kommentarer og
1 løsning

Ændre textfil via kode...

Hejsa

Er der nogen der ved hvordan man ændre en tekstfil via kode ?

Det jeg er ude efter er at kunne ændre en linie midt i filen - altså erstatte hele linien med en ny.

Jeg ved godt hvordan jeg tilføjer linier til toppen eller bunden af en fil, men spørgsmålet er hvordan man smider en linie ind midt i filen som erstatning for en anden.

Det må ikke være sådan at jeg smider alle linierne inden den linie der skal ændres ind i en variabel og det samme med linierne efter for derefter bare at oprette en ny fil og skrive linierne til den i rigtig rækkefølge - det skal være en løsning hvor man direkte erstater én linie med en anden.....

Takker,

Horus

Avatar billede tdaugaard Nybegynder
15. februar 2001 - 09:04 #1
Dim fLines() As String

Private Sub cmdStart_Click()
  ReDim fLines(0) As String

  Open \"sowhat.txt\" For Input As #1
    Do Until Eof(1)
      Line Input #1, fLines(UBound(fLines))
      ReDim Preserve fLines(UBound(fLines) + 1) As String
    Loop
  Close #1

  ReDim Preserve fLines(UBound(fLines) - 1) As String

  fLines(15) = \"denne linie erstatter linie 16. linie numre sarter ved 0\"

  Open \"sowhat.txt\" For Output As #1
    For Index = 0 To UBound(fLines)
      Print #1, fLines(Index)
    Next
  Close #1
End Sub
Avatar billede tdaugaard Nybegynder
15. februar 2001 - 09:05 #2
Det er den eneste måde at gøre det på!
Avatar billede horus Nybegynder
15. februar 2001 - 09:53 #3
Hmmmm, OK, jeg tror nok jeg forstår, men jeg kan vel ikke lokke dig til at kommentere hvad din løsning gør undervejs - jeg er endnu ikke så stærk i filskrivning/læsning til at jeg kan se det klart for mig....


Horus
Avatar billede horus Nybegynder
15. februar 2001 - 09:59 #4
hmmmm, så har jeg gransket den lidt nøjere... er det korrekt at du først læser hele filen ind i en matrix (flines()) dernæst tilpasser man den linie der skal ændres ved at ændre matrixen, for til sidst at fyre hele matrixen ned i filen på ny. ?

Det er selvfølgelig en lidt fancy\'er måde at gøre det på, men principielt vel nøjagtig det samme som jeg beskrev, med at proppe linierne før og efter i variabler og så skrive til filen på ny ?

Nå, ja - men kan det ikke lade sig gøre, så kan det ikke lade sig gøre :-)

Du ved ikke om man kan løse dette problem ved at lave en sammenkædet tabel i Access f.eks. og så ændre i den tabel der kommer ud af det ????

Horus
Avatar billede tdaugaard Nybegynder
15. februar 2001 - 10:00 #5
Se\'følig :-)

\' Gør et array klar, men uden elementer da ReDim (ReDimension) klarer den.
Dim fLines() As String

Private Sub cmdStart_Click()
  \' ReDim array\'et til 0 elementer (dvs. 1 linie)
  ReDim fLines(0) As String

  \' Åben filen \"sowhat.txt\", så vi kan læse den
  Open \"sowhat.txt\" For Input As #1

    \' Loop indtil vi er ved enden af filen (EOF = EndOfFile)
    Do Until Eof(1)

      \' Læs en hel linie in i det største mulige element # i arrayet. UBound() = Upper Bound
      Line Input #1, fLines(UBound(fLines))

      \' ReDim array\'et til største mulige element+1 så der er plads til en linie mere.
      ReDim Preserve fLines(UBound(fLines) + 1) As String
    Loop

  \' Luk filen
  Close #1

  \' Da der altid vil være et element mere end der er brug for, så ReDim\'er
  \' vi array\'et til srøste element-1.
  ReDim Preserve fLines(UBound(fLines) - 1) As String

  \' Her kan du frit lave om på de forskellige linie vha. deres linie nr. -1. Dvs. linie 1 har
  \' element nr. 0.
  fLines(15) = \"denne linie erstatter linie 16. linie numre sarter ved 0\"

  \' Åben filen \"sowhat.txt\" så vi kan skrive til den (Output)
  Open \"sowhat.txt\" For Output As #1

    \' Loop fra 0 til det største mulige element i array\'et
    For Index = 0 To UBound(fLines)

      \' Skriv hver enkelt linie til filen igen
      Print #1, fLines(Index)
    Next

  \' Luk filen
  Close #1
End Sub

er det ok, eller vil du have forklaret mere ?
Avatar billede tdaugaard Nybegynder
15. februar 2001 - 10:05 #6
det er godtnok ikke et matrix, da et matrix er et 2 dimensionelt array (dvs. f.eks. Dim myarray(10, 12) hvor du så f.eks. har x aksen på 11 elementer og y med 13) men anyway, det her er den eneste måde at gøre det på, og hvis du vil til at bruge en Access database (hvorfor ved jeg ikke, da jeg ikke kan se fordelen..) så vil det bare sløve programmet ned...
Avatar billede horus Nybegynder
15. februar 2001 - 10:09 #7
OK,

ER det så muligt at oprette et recordset eller lign. fra VB direkte til TXT filen, så man ville kunne gøre til en Access database, og så tilføje og ændre til TXT filen igennem recordsetet ????

Horus
Avatar billede horus Nybegynder
15. februar 2001 - 10:09 #8
Jeg ved godt at jeg strammer den, men jeg vil hjertens gerne give dig flere p, hvis du kan hjælpe mig med en løsning på det sidste spørgsmål :-)

Horus
Avatar billede tdaugaard Nybegynder
15. februar 2001 - 10:11 #9
Du kan ikke ændre en tekst fil igennem et Recordset .. det er jo kun til databaser .. hvorfor kan min løsning ikke bruges da ?
Avatar billede horus Nybegynder
15. februar 2001 - 10:16 #10
ØV :-(

Det anede mig, men jeg ville lige udtømme hver en kilde....

Din løsning kan sagtens bruges, jeg ville bare have foretrukket ikke at skulle overskrive HELE filen ved hver en ændring - men hva\' større problem er det heller ikke - det er bare når man har en idé - så har den død og pine også bare at kunne lade sig gi\' sig - kender du det ? :-)

Nå, men tak for hjælen t - jeg har erkendt at der ikke er noget at gøre, så jeg array\'er den :-)

Hygge,

Horus
Avatar billede tdaugaard Nybegynder
15. februar 2001 - 10:24 #11
hæ hæ .. jeg kender det alt for godt ... ;o)
Avatar billede joern Nybegynder
15. februar 2001 - 11:11 #12
Nu er sagen jo afsluttet, men jeg benytter ascii-filer som databaser og anvender to filer til en sådan operation.
Jeg læser alle linier en for en over i en ny fil.  Når jeg når til den jeg ændrer læses ikke fra primær-filen med fra tekst-boksen, resten læses fra fil ét.

Efterfølgende kopierer jeg fil to oveni fil ét med FileCopy. 

Hvor store er filerne?  Med 10.000 linier tager det mindre tid end at sige \'tetid igen\'.
Ram bruges der ikke noget af, arrays er unødvendige, bare én variabel til hver linie, der vel er på under 64 k tegn.

M.v.h.  Jørn 
Avatar billede tdaugaard Nybegynder
15. februar 2001 - 11:15 #13
joern:> hvorfor bruger du text filer som databaser !?
Og din løsning er da nok hurtigere, men bruger en midlertidig fil, og det ville horus ikke ..
Avatar billede horus Nybegynder
15. februar 2001 - 11:32 #14
Tak for inputet jørn,

Det var da egentlig en meget interesant tanke - men som t nævner så kræver det en midlertidig fil der skal slettes osv. og det er jeg ikke interesseret i p.t.

Men tak alligevel.

Horus
Avatar billede joern Nybegynder
15. februar 2001 - 13:06 #15
tdaugaard:> Svaret med mail til e@tdaugaard.dk

Midlertidig fil?  dræb den!  Kill minfil.bak  Jeg melder mig ud af spørgsmålet nu.

m.v.h.  Jørn
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