Avatar billede morten_leth Nybegynder
11. maj 2005 - 15:12 Der er 5 kommentarer og
1 løsning

Script til at lav en ny txt fil, udfra eksisterende.

Hey Alle...

Nu har jeg igen brug for lidt hjælp..

Jeg skal have lavet et script som skal bruges til at kopiere alt indhold fra en .ini fil, over til en ny fil... og hvis den rammer et brugernavn som er defineret udfra en variabel, skal den skrive ";Ledig" foran og skrive nøjagtig det samme som før, plus at den så skal gå videre i scriptet og skrive hvad der nu ellers står...

FX. Hvis jeg har en .ini fil der hedder Morten hvori der står:
Morten
Kurt
Egon
Finn

Og i min variabel har jeg brugernavnet Morten så skal der i filen stå:

;Ledig Morten
Kurt
Egon
Finn

til slut skal den midlertidige fil så omdøbes til at hedde det samme som den anden men det kan jeg sagtens selv lave...

Jeg har også fået lavet lidt af det, men jeg synes ikke rigtig jeg kan få den til at gøre HELT hvad det er jeg gerne vil have...

option explicit

Dim fso, f, strLine, myfile, strWrite
Const ForReading = 1, ForWriting = 2, OverwriteExisting = True


Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("c:\morten.ini", ForReading)
  Do While f.AtEndOfStream <> True
    strLine = f.ReadLine
    strWrite = strWrite & strLine & vbCrLf
            Set MyFile = fso.CreateTextFile("c:\testfile.txt", OverwriteExisting)
            MyFile.WriteLine(strWrite)
            MyFile.Close
  Loop

den kopiere alt indholdet fra en fil til en anden, men jeg kan ikke lige greje den sidste del, for hvis man laver en IF Then statement så skal jeg jo stadig have skrevet det, uden den skriver brugernavnet igen...

Håber på bare LIDT input.. hehe..

/Leth
Avatar billede morten_leth Nybegynder
12. maj 2005 - 10:27 #1
Tjah nu fik jeg det selv til at virke, og det spiller bare, så nu skal jeg bare have det til at omdøbe filen, men ved i om det kan lade sig gøre at omdøbe den også overskrive hvis der er en eksisterende... eller om jeg skal slette den gamle fil først...

option explicit

Dim fso, f, strLine, myfile, strWrite, intIsTrue, objFSO
Const ForReading = 1, ForWriting = 2, OverwriteExisting = True


Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("c:\morten.ini", ForReading)
  Do While f.AtEndOfStream <> True
    strLine = f.ReadLine
        intIsTrue = Instr(1,strLine,"Morten", 1)
    If intIsTrue > 0 Then
        strWrite = strWrite & ";Ledig " & strLine & vbCrLf
    else
        strWrite = strWrite & strLine & vbCrLf
    End If
  Loop
  f.close
Set MyFile = fso.CreateTextFile("c:\testfile.ini", OverwriteExisting)
MyFile.WriteLine(strWrite)
MyFile.Close

wscript.sleep 10000
Set MyFile = fso.GetFile("c:\Morten.ini")
MyFile.Delete
FSO.MoveFile "C:\testfile.ini" , "C:\morten.ini"

Det blev til sådan noget her... ;)
Avatar billede killerclown Nybegynder
15. maj 2005 - 12:09 #2
Hey Morten !
Jeg er ikke helt sikker på hvad du mener (?)

/Killer
Avatar billede morten_leth Nybegynder
16. maj 2005 - 17:37 #3
okay.. mit første problem var at jeg ikke kunne omdøbe filen til det den anden hed, da der tilsyneladende (af hvad jeg kan finde ud af) ikke er nogen funktion når man omdøber der hedder overskriv...

Så er jeg stødt ind i et andet problem, til sidst i filen der har jeg det problem den sætter et tomt space ind (altså enter) hvilket vil sige den på sigt vil have en masse blanke spaces i bunden, dette vil jeg også helst slippe for...

Hvis du stadig ikke forstår det må du jo lige skrive, for så skal jeg nok se om ikke jeg kan forklare det på en anden måde...

/Leth
Avatar billede killerclown Nybegynder
17. maj 2005 - 11:28 #4
Hey Morten !
Det ser ud til, at det ikke er scriptet, der indsætter "enteren" men simpelthen den måde den nye fil bliver lavet på.
Hvis du blot laver en ny textfil, vil den første linie jo altid være der.
Når du så indsætter nye linier bliver denne jo bare skubbet nedad :)
Når du så læser filen, vil den læse mellemrummet igen, og indsætte det igen :)
Hvis du gør sådan her slipper du for, at den bliver ved med, at indsætte "enter" :

  Do While f.AtEndOfStream <> True
    strLine = f.ReadLine
    count = count+1
    If count = 1 then
        intIsTrue = Instr(1,strLine,"Morten", 1)
    If intIsTrue > 0 Then
        strWrite = strWrite & ";Ledig " & strLine
    else
        strWrite = strWrite & strLine
    End If
    else
    intIsTrue = Instr(1,strLine,"Morten", 1)
    If intIsTrue > 0 Then
        strWrite = strWrite & VbCrLf & ";Ledig " & strLine
    Else
        strWrite = strWrite & VbCrLf & strLine
    End If
    End If
  Loop
  f.close
Set MyFile = fso.CreateTextFile("c:\testfile.ini", OverwriteExisting)
MyFile.WriteLine(strWrite)
MyFile.Close

wscript.sleep 10000
Set MyFile = fso.GetFile("c:\Morten.ini")
MyFile.Delete
FSO.MoveFile "C:\testfile.ini" , "C:\morten.ini"

/Killer
Avatar billede morten_leth Nybegynder
17. maj 2005 - 20:33 #5
He he, i bund og grund så viste jeg godt hvad det var der var galt,

strWrite = strWrite & strLine

denne linje satte et CrLf ned i bunden, jeg har dog fundet ud af hvordan jeg kunne gøre det, og jeg har også fundet ud af hvad jeg kunne gøre for at overskrive den anden.. ;)

Dette er det jeg kom frem til til sidst...

option explicit

Dim fso, OpenFile, strLine, NewFile, strWrite, intIsTrue
Const ForReading = 1, ForWriting = 2, OverwriteExisting = True


Set fso = CreateObject("Scripting.FileSystemObject")
Set OpenFile = fso.OpenTextFile("c:\morten.ini", ForReading)
  Do until OpenFile.AtEndOfStream = true
    strLine = OpenFile.ReadLine
        intIsTrue = Instr(1,strLine, strUserName , 1)
    If intIsTrue > 0 Then
        strWrite = strWrite & ";LEDIG-" & strLine & vbCrLf
    else
        strWrite = strWrite & strLine & vbCrLf
    End If
  Loop
  OpenFile.close

If Right(strWrite, 2) = vbCRLF Then
strWrite = Mid(strWrite, 1, Len(strWrite) - 2)
end if

Set NewFile = fso.CreateTextFile("c:\morten.ini", OverwriteExisting)
NewFile.WriteLine(strWrite)
NewFile.Close


strWrite = Mid(strWrite, 1, Len(strWrite) - 2)
denne linje her skære det sidste Carriage return–linefeed væk....

/Leth

Men smid da et svar så får du også lidt af le point...
Avatar billede morten_leth Nybegynder
24. maj 2005 - 17:48 #6
Tjah, jeg lukker hvis det er du ikke kommer med et svar, du får indtil næste gang jeg går ind og tjekker...
Kan du have det godt takker for hjælpen..

/Leth
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