25. december 2004 - 16:41Der 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/.
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
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.
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
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
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).
Beklager at jeg ikke fik lukket det. Jeg modtog ikke emails om, at du havde postet noget.
Takker for hjælpen - det virker :-)
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.