Avatar billede target Nybegynder
29. januar 2003 - 14:35 Der er 27 kommentarer og
1 løsning

Replace " " med ","

Jeg sidder med følgende tekstdokument (c:\Daily Report d." & Date & ".txt) og vil gerne replace nogen af mellemrumne med komma'er.

---------------------------------------------------------------------------
  9      162  437    10    19  2423  24  49  44    82    1  11  3019

Det har jeg prøvet at løse på følgende måde:

Private Sub tilcsv()

    Dim readfil, writefil, result1 As String

    readfil = "c:\Daily Report d." & Date & ".txt"
    writefil = "c:\Daily Report d." & Date & ".csv"

    MsgBox ("Du læser fra denne fil: " & readfil), vbOKOnly

    Open readfil For Input As #1
               
    Open writefil For Output As #2

        Do While Not EOF(1) = True

            Line Input #1, result

            If result Like "--------*" Then

            Line Input #1, result

               
                        result1 = result.Replace(result, "    ", ",")
               
                        Print #2, result
               
            End If

        Loop

    Close #2

    Close #1

End Sub


Men jeg får følgende fejl:
Kørselsfejl "424":
Et object er obligatorisk


Der skal måske til sidst tilføjes, at jeg bruger VB-delen i Excel.
Avatar billede martin_moth Mester
29. januar 2003 - 15:05 #1
Hvor får du fejlen? I hvilken linie?
Avatar billede martin_moth Mester
29. januar 2003 - 15:07 #2
Har du bemærket, at du har dim'met "result1", men bruger en variabel der bare hedder "result" ?
Avatar billede target Nybegynder
29. januar 2003 - 15:22 #3
Jeg får fejlen i denne linie:

result1 = result.Replace(result, "    ", ",")

Og ja, det har jeg lagt mærke til. Men hvis jeg Dim'er "result" så får jeg bare en anden fejl, nemlig:

Der opstod en kompileringsfejl:
Det foranstillede navn er ugyldigt
Avatar billede target Nybegynder
29. januar 2003 - 15:50 #4
Nå, jeg smutter hjem fra arbejde nu, men i er velkomne til at svare i løbet af dagen/natten. Så vil jeg kigge på det som det første imorgen tidlig.
Avatar billede rynke10 Novice
29. januar 2003 - 18:28 #5
result1 = result.Replace(result, "    ", ",")

prøv istedet med

result1 = Replace(result, "    ", ",")
Avatar billede martin_moth Mester
29. januar 2003 - 19:17 #6
Det er fordi Result er et reserveret ord - det må du ikke bruge som variabelnavn :o)

Men det ser ud til at rynke kom mig i forkøbet, men jeg har dog lidt at supplere med. Du læser linierne ind i en variabel der hedder result, og skriver derefter result til filen. Så er spørgsmålet, hvad du egentligt bruger result1 til? Det er en fejl i din kode, du skal bruge din variabel result1 i stedet for result. Og brug så svaret fra rynke10

Altså: Erstat alle(!!!) result med result1, og brug derefter rynke10's svar ;o)

PS: Når du poster en masse kode og beder om hjælp til at finde fejlen, gør du alle en kæmpe tjeneste ved at sige HVOR fejlen ligger. Lidt som at parkere bilen hos en mekaniker og sige, at der er en fejl der skal laves på bilen, men du siger ikke hvad - det er op til mekanikeren at finde ud af :o(

PPS: Det du kalder VB-delen til excel er VBA - Visual Basic for Applications, som er macrosproget for hele officepakken... :o)
Avatar billede target Nybegynder
30. januar 2003 - 08:19 #7
Nu har jeg prøvet med.

result1 = Replace(result, "    ", ",")

Og der får jeg følgende fejl:

Fejl i kompilering:
Sub- eller Function-procedure er ikke defineret

Og hvis jeg erstatter ALLE mine result med result1 så får jeg samme fejl.
Avatar billede martin_moth Mester
30. januar 2003 - 08:56 #8
Igen - hvor kommer fejlen?

Jeg har gjort præcist det samme, taget din kode, skiftet result med result1, og brugt svaret fra rynke10. Og det virker perfekt:

    Dim readfil, writefil, result1 As String
    readfil = "c:\test\test.txt"
    writefil = "c:\test\test.csv"
    MsgBox ("Du læser fra denne fil: " & readfil), vbOKOnly
    Open readfil For Input As #1
    Open writefil For Output As #2
    Do While Not EOF(1) = True
      Line Input #1, result1
        If result1 Like "--------*" Then
          Line Input #1, result1
          result1 = Replace(result1, "    ", ",")
          Print #2, result1
        End If
      Loop
    Close #2
    Close #1
Avatar billede target Nybegynder
30. januar 2003 - 08:58 #9
Fejlen kommer kun i replace-linien.
Jeg prøver lige med din kode.
Avatar billede martin_moth Mester
30. januar 2003 - 08:59 #10
PS: der var en lille fejl i rynkes svar - der manglede også at blive erstattet et result med et result 1. Når du har skiftet ALLE result, så der ingen steder i din kode overhovedet står result, så virker det. Kopier min kode ovenfor - den virker som sagt :o)
Avatar billede target Nybegynder
30. januar 2003 - 09:01 #11
Nu har jeg lavet en ny fil med din kode, og det eneste jeg har ændret er stien til teksfilerne. Og jeg får stadig følgende fejl i replace-linien:

Fejl i kompilering:
Sub- eller Function-procedure er ikke defineret
Avatar billede target Nybegynder
30. januar 2003 - 09:05 #12
Altså min kode ser nu således ud:

Private Sub test()

  Dim readfil, writefil, result1 As String
    readfil = "c:\Daily Report d." & Date & ".txt"
    writefil = "c:\Daily Report d." & Date & ".csv"
    MsgBox ("Du læser fra denne fil: " & readfil), vbOKOnly
    Open readfil For Input As #1
    Open writefil For Output As #2
    Do While Not EOF(1) = True
      Line Input #1, result1
        If result1 Like "--------*" Then
          Line Input #1, result1
          result1 = Replace(result1, "    ", ",")
          Print #2, result1
        End If
      Loop
    Close #2
    Close #1
End Sub
Avatar billede target Nybegynder
30. januar 2003 - 09:07 #13
Det kan ikke være fordi, at result1 skal deklerares til noget andet end string?
Avatar billede martin_moth Mester
30. januar 2003 - 09:08 #14
Lyder mystisk - jeg får ingen fejl what-so-ever. Men det er jo en god øvelse i lidt debugging. Kan VB genkende replace - hvis du skriver det med lille "r", skifter den så selv til stort?
Har du en oldnordisk version af Excel (og dermed VBA - jeg kører VBA 6.0)?
Og har du kopieret koden direkte - ikke ændret noget som helst (pånær stien til filen)?

Det eneste der kan give mening for mig er at du har en version af VBA der ikke understøtter Replace (lydermystisk) eller du har kommet til at ændre lidt på koden?
Avatar billede martin_moth Mester
30. januar 2003 - 09:09 #15
Nej - det har intet som helst med hvordan result1 er erklæret at gøre. Ingen fejl der!
Avatar billede target Nybegynder
30. januar 2003 - 09:22 #16
Hvis jeg skriver replace med lille r, og går hen i slutningen af linien og trykker Enter, så retter den det selv til stort, så den kan godt genkende commandoen. Jeg bruger den VBA der ligger i Excel 97, så det er en lidt gammel version. Jeg har pt. ikke nogen mulighed for en nyere version, desværre.
Avatar billede target Nybegynder
30. januar 2003 - 09:23 #17
Og forresten, ja, jeg har kopieret hele din kode, og kun ændret stien til filerne og selvfølgelig tilføjet Private Sub og End Sub
Avatar billede martin_moth Mester
30. januar 2003 - 09:28 #18
Eftersom den godt kender Replace-funktionen, vil jeg påstå, at koden er fejlfri. Den påstand er bare lidt dum, da du får en fejl. Hvis du har mulighed for at sende mig arket (bare det lille test-ark du har), så kan jeg se om jeg kan finde andre ting der gør, at det ikke virker. Måske har du gjort ete eller andet, der ikke har noget med macroen at gøre, men som alligevel bevirker at du får fejlen. Send til martin_moth@yahoo.com
Avatar billede target Nybegynder
30. januar 2003 - 09:31 #19
Så skulle det være afsendt til dig. Jeg har ikke skrevet nogen i mit Excel-ark endnu, men nu kan du kigge lidt på det. ;) Håber du finder min fejl.
Avatar billede martin_moth Mester
30. januar 2003 - 09:47 #20
Det her går over min fatteevne - det virker UPÅKLAGELIGT hos mig - og jeg får lavet en fin .csv-fil...

Prøv lige at se hvilken VBA-version du har (Help -> About MicroSoft Visual Basic) - jeg har version 6.0.8714

Prøv at tryk F1 når cursoren står midt i Replace-ordet, og se om du ikke får en fin beskrivelse af Replace-funktionen?
Avatar billede target Nybegynder
30. januar 2003 - 11:10 #21
Når jeg går ind i Hjælp/Om Microsoft Visual Basic, så får jeg ikke noget versions-nummer. Der står bare Microsoft Visual Basic og så noget med Copyright osv. fra 1987-1997.

Og jeg kan sagtens få hjælp frem til Replace-funktionen, men der er ikke noget der har kunnet hjælpe mig.
Avatar billede martin_moth Mester
30. januar 2003 - 11:21 #22
Jeg fatter ikke hvad der galt - det burde virke, og det virker hos mig.

Jeg kan tilbyde dig at lave en lille exe-fil (i VB, ikke VBA), hvor du kan vælge din txt-fil og in csv-fil, samt indtaste hvad der skal replaces med hvad...

Alternativt kan du skodde Replace-funktionen, og selv lave en replacefunktion vha. instr(), mid() osv...
Avatar billede target Nybegynder
30. januar 2003 - 11:34 #23
Det er meget pænt af dig, men jeg vil helst gerne have koden, da det skal være en del af et større projekt. Nu er jeg ikke så meget inde i de forskellige commandoer i VB, men jeg vil prøve at kigge lidt på de to du skriver der.
Jeg lader lige spørgsmålet stå åbent lidt endnu, men hvis der ikke kommer andre svar og jeg kan få det til at virke med de commandoer du skriver dér, så får du point'ne. ;)
Avatar billede target Nybegynder
30. januar 2003 - 11:49 #24
Nu har jeg så prøvet at erstatte min replace med følgende linie:

test = InStr(result1, "    ")

Og har så kigget lidt på commandoen mid() men jeg synes ikke jeg kan gennemskue hvad jeg skal bruge den til?
Avatar billede martin_moth Mester
30. januar 2003 - 11:58 #25
Det er bare tåbeligt, at du bliver nødt til at lave din egen replace-funktion. Jeg fatter som sagt ikke hvad der går galt, har mistanke om at du kører med en for gammel funktion, men hvorfor er Replace så beskrevet i hjælpen...

Mid(), InStr(), Len(), Left() og Right() kan altid kombineres på passende vis så du kan opnå alle de strengemanipulationer du ønsker. Det er blot et spørgsmål om kreativitet ;o)

Måden du kan gøre det på er at læse hver linie karakter for karakter, tjekke karakteren og så handle ud fra hvilken karakter du har...
Avatar billede target Nybegynder
30. januar 2003 - 12:02 #26
Okay. Jeg må prøve at se, om jeg kan få det til at fungere.

Og ja, det er da pisse irreterende, at den funktion ikke virker... Men tak for hjælpen so far.
Avatar billede target Nybegynder
03. februar 2003 - 09:34 #27
Jeg fandt ud af, at det faktisk var bedre at bruge mid()-funktionen i mit tilfælde, så nu virker det simpelthen bare som det skal. ;) Mange tak for hjælpen, undskyld jeg først giver point nu.
Avatar billede martin_moth Mester
03. februar 2003 - 13:08 #28
helt OK :o)
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