Avatar billede jesperdyhr Praktikant
20. oktober 2007 - 11:46 Der er 6 kommentarer

Lille program til at manipulere text i en text-fil

Hej Eksperter.
Jeg skal have et program der kan fjerne et tal og sætte et nul ind i en tekst-linie.
Det er en betalingspil fra PBS, hvor kontrolcifferet i kode-linien skal fjernes, og linien skal derfter have indsat et nul foran kundenummeret.

Linien ser således ud:
BS0420385705002970000000200000000000000199687100000016100710000000229500        167120071016N1869599451610071710070000000229500

Det er karakter nummer 44 (et 8-tal i denne linie) der skal fjernes, og så skal det erstattes med et nul. der skal stå på karakter nummer 31.

Når linien er "repareret", skal den se således ud:
BS0420385705002970000000200000000000000019967100000016100710000000229500        167120071016N1869599451610071710070000000229500

Jeg synes det ville være fint med en dialogboks hvor man kan vælge filen, der skal modificeres (de hedder noget med D4219601.BS1), og samtidig samtidig gemme den modificerede fil under et nyt navn (det kunne da godt være en fast tilføjelse af et A til filnavnet før .BS1 så den hedder B4219601A.BS1)

Hvem kan lave det i excel, access eller blot som en exe-fil??

Hilsen
Jesper
Avatar billede kabbak Professor
20. oktober 2007 - 12:06 #1
er der kun 1 linje, i hver fil ??.
Avatar billede kabbak Professor
20. oktober 2007 - 12:29 #2
her er den til excel

Public Sub Skift()
    Dim Gammel As String, Ny As String
    filnavn = Application.GetOpenFilename
    If filnavn <> "" Then

        Open filnavn For Input As #1
        Line Input #1, Gammel    'henter 1 linje
        Close 1

        filnavn = Split(filnavn, ".")(0) & "A." & Split(filnavn, ".")(1)    ' tilføjer et "A" til filnavnet
        Ny = Left(Gammel, 43) & Right(Gammel, Len(Gammel) - 44)    ' fjerner tegn 44
        Ny = Left(Ny, 30) & "0" & Right(Ny, Len(Gammel) - 31)    'indsætter et "0" på plads 31
        Open filnavn For Output As #1
        Print #1, Ny
        Close 1


    End If
End Sub
Avatar billede kabbak Professor
20. oktober 2007 - 12:30 #3
et lige

  If filnavn <> "" Then

til

If filnavn <> False Then
Avatar billede jesperdyhr Praktikant
20. oktober 2007 - 13:12 #4
Hej Kabbak

Der kan være flere linier i hver fil, og faktisk flere linier end den, der skal modificeres. Men linien der skal modificeres starter altid med BS042.

Kunne du evt. lave en færdig excel-fil?
Avatar billede kabbak Professor
20. oktober 2007 - 19:44 #5
du skal bare sætte koden ind i et modul, og så kør makroen.

Public Sub Skift()
    Dim Gammel As String, Ny As String
    filnavn = Application.GetOpenFilename
    If filnavn <> False Then

        Open filnavn For Input As #1
        filnavn2 = Split(filnavn, ".")(0) & "A." & Split(filnavn, ".")(1)    ' tilføjer et "A" til filnavnet
        Open filnavn2 For Output As #2
        Do
            Line Input #1, Gammel    'henter 1 linje
            If Left(Gammel, 5) = "BS042" Then
                Ny = Left(Gammel, 43) & Right(Gammel, Len(Gammel) - 44)    ' fjerner tegn 44
                Ny = Left(Ny, 30) & "0" & Right(Ny, Len(Gammel) - 31)    'indsætter et "0" på plads 31
            Else
                Ny = Gammel
            End If
            Print #2, Ny
        Loop Until EOF(1)

        Close 2
        Close 1

    End If
End Sub
Avatar billede jesperdyhr Praktikant
28. oktober 2007 - 15:49 #6
Hej igen

Jeg skal lige afprøve funktionen på en fil jeg henter hér efter den første.

Men det ser ud til at fungere på en fil med kun en linie.
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