Avatar billede axkris Nybegynder
25. december 2004 - 16:41 Der er 12 kommentarer og
3 løsninger

Ændre værdi i flere filer

Hej alle

Jeg skal bruge et script, som kører igennem de xml-filer (tekst-filer), som findes i et bibliotek. Hver gang scriptet finder værdien "/bibliotek1/" i en fil, skal den ændre det til "/bibliotek2/.
Avatar billede martin_moth Mester
27. december 2004 - 08:00 #1
Ja, du kan jo downloade Ultraedit, og bruge funktionen "Replace in Files"

Alternativt selv lave et program - nu siger du script, men du bruger vel Visual Basic? I VB (og i VBA) kan du jo åbne filen på helt almindelig vis som en tekstfil, og læse linie for linie, og så ændre når du finder det du søger. Kan godt lave koden for dig, men hvis det ikke er et program du skal lave, men blot et problem du skal have løst, er ultraedit nok det nemmeste

http://www.ultraedit.com/index.php?name=Downloads
Avatar billede axkris Nybegynder
27. december 2004 - 11:47 #2
Du må gerne lave vb-koden til mig, fordi der er tale om, at værdien skal ændres i mange filer og det skal ske tit, hvorfor jeg helst vil undgå at bruge nogen tekst-editerings-program.
Avatar billede martin_moth Mester
27. december 2004 - 12:16 #3
Dim Filnummer As Long
Dim tmpArray() As String
Dim i As Long

'Åben fil og læs i array
  i = 0
  Filnummer = FreeFile
  Open "C:\Fil.txt" For Input As #Filnummer
  While Not EOF(Filnummer)
    ReDim Preserve tmpArray(i)
    Line Input #Filnummer, tmpArray(i)
    i = i + 1
  Wend
  Close #Filnummer

'Erstat "/bibliotek1/" med "/bibliotek2/"
  For i = LBound(tmpArray) To UBound(tmpArray)
    If InStr(1, tmpArray(i), "/bibliotek1/") > 0 Then
      tmpArray(i) = Replace(tmpArray(i), "/bibliotek1/", "/bibliotek2/", 1)
    End If
  Next i

'skrive array til fil
  Filnummer = FreeFile
  Open "C:\Fil.txt" For Output As #Filnummer
  For i = LBound(tmpArray) To UBound(tmpArray)
    Print #Filnummer, tmpArray(i)
  Next i
  Close #Filnummer


Så er det bare at skifte strengen "Fil.txt" ud med dine filnavne.

Fx. brug en filelistbox, og smid et loop omkring hele koden, og hent filnavnet fra filelistboxen hver gang. HUSK at nulstil arrayet hvis du looper
Avatar billede axkris Nybegynder
27. december 2004 - 12:19 #4
Kan du ikke få scriptet til at finde alle de filer, som findes i biblioteket og køre dem igennem - jeg kender nemlig ikke fil-navnene på forhånd.
Avatar billede martin_moth Mester
27. december 2004 - 12:21 #5
Ovenstående er altså ikke et script, men VB kode, der skal kompileres til en .exe eller afvikles fra VB.

Du kan jo bare bruge en filelistbox, som jeg har beskrevet - så behøver du ikke kende filnavnene
Avatar billede axkris Nybegynder
27. december 2004 - 12:24 #6
Men kan du så ikke indbygge en filelistbox til mig? :)

(Kører det som en vb-fil)
Avatar billede martin_moth Mester
27. december 2004 - 12:25 #7
Har du ikke programmeret i VB før?
Avatar billede axkris Nybegynder
27. december 2004 - 12:27 #8
Meget lidt
Avatar billede martin_moth Mester
27. december 2004 - 12:40 #9
Start VB, lav en ny form, smid en filelistbox på formen - den SKAL hedde File1 - og copy-paste nedenstående kode.


Private Sub Form_Load()
Dim Filnummer As Long
Dim tmpArray() As String
Dim i As Long
Dim j As Long
Dim strMappe As String

strMappe = "c:\temp\" '<--- HER SKAL DU SELV ÆNDRE STIEN - den SKAL!!!! slutte med \
If vbNo = MsgBox("Nu bliver alle XML-filer i " & strMappe & " ændret - fortsæt", vbYesNo + vbCritical, "Er du SIKKER?") Then End

File1.Path = strMappe
File1.Pattern = "*.txt"  '<--- HER SKAL DU EVT. SELV ÆNDRE EXTENTION
If File1.ListCount < 1 Then
  MsgBox "Der er ingen XML-filer i mappen"
  End
End If

For j = 0 To File1.ListCount - 1
  i = 0
  ReDim tmpArray(i) '<--- Nulstiller arrayet
  Filnummer = FreeFile

  Open strMappe & File1.List(j) For Input As #Filnummer
  While Not EOF(Filnummer)
    ReDim Preserve tmpArray(i)
    Line Input #Filnummer, tmpArray(i)
    i = i + 1
  Wend
  Close #Filnummer

'Erstat "/bibliotek1/" med "/bibliotek2/"
  For i = LBound(tmpArray) To UBound(tmpArray)
    If InStr(1, tmpArray(i), "/bibliotek1/") > 0 Then
      tmpArray(i) = Replace(tmpArray(i), "/bibliotek1/", "/bibliotek2/", 1)
    End If
  Next i

'skrive array til fil
  Filnummer = FreeFile
  Open strMappe & File1.List(j) For Output As #Filnummer
  For i = LBound(tmpArray) To UBound(tmpArray)
    Print #Filnummer, tmpArray(i)
  Next i
  Close #Filnummer
Next j
MsgBox "Slut prut finale - der er ændret " & File1.ListCount & " filer i alt"
End Sub
Avatar billede martin_moth Mester
27. december 2004 - 13:17 #10
Kan du bruge det?
Avatar billede axkris Nybegynder
27. december 2004 - 14:45 #11
Ja, helt klart - sejt :-)

Nu skal jeg ikke bruge VB-programmet (men blot klikke på filen), så gider du ikke lave 2 promht'er (altså to alert'er med et tekst-felt i hver) således, at man kan indskrive bibliotekerne som skal ændres (altså unden at skulle anvendes forms).
Avatar billede martin_moth Mester
27. december 2004 - 14:48 #12
Nej - det kan du selv. Lav en textboks på formen, eller brug en inputbox:

Svar = Inputbox("Skriv noget her: ")

kompiler det hele til en exe (file - Make .Exe) som du kan dobbeltklikke på
Avatar billede martin_moth Mester
27. december 2004 - 15:30 #13
Er du med?
Avatar billede martin_moth Mester
28. december 2004 - 11:16 #14
Hallo?
Avatar billede axkris Nybegynder
08. april 2005 - 10:36 #15
Beklager at jeg ikke fik lukket det. Jeg modtog ikke emails om, at du havde postet noget.

Takker for hjælpen - det virker :-)
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