Avatar billede soenderhegn Nybegynder
19. november 2003 - 08:48 Der er 16 kommentarer og
1 løsning

write, string

Når jeg bruger write til at skrive i en ascii fil får jeg apostrof " som første og sidste tegn i linjen.
Hvordan undgår man det?
Avatar billede martin_moth Mester
19. november 2003 - 08:53 #1
Prøv at vis din kode, der må være en fejl i den
Avatar billede soenderhegn Nybegynder
19. november 2003 - 09:14 #2
Nedenstående kode laver følgende linje:
"18-11-03;102-360P130;593"

Dim nydato, varenr as string
dim AntalGode as integer

exlinje = nydato & ";" & varenr & ";" & Val(AntalGode)

Open TargetFileName For Append As #2
          Write #2, exlinje
Close #2

Er det fordi jeg bruger Val på integer dim?
Avatar billede martin_moth Mester
19. november 2003 - 09:23 #3
Har ikek noget med val at gøre - jeg fatter ikke hvor de " kommer fra, det ser helt rigtigt ud det du gør. Prøver lige din kode af i VBA (har ikke VB her - 2 sek)
Avatar billede martin_moth Mester
19. november 2003 - 09:27 #4
Øhh - det tager jeg i mig igen - det ser meget mystisk ud.

Hvorfra får nydato sin værdi?
Hvorfra får varenr sin værdi?
Hvorfra får antalGode sin værdi?

Har du "klippet" nogle kodelinier ud?
Kan du ikke vise hvor du tildeler ovenstående variabler deres værdi?
Avatar billede soenderhegn Nybegynder
19. november 2003 - 09:43 #5
Her er hele koden.
Sourcefile er en asciifil med fastlængde
Targetfile er ; sepereret

Private Sub bt_ConvertFile_Click()
On Error GoTo fejl


Dim Medarbejdernr As Single
Dim strMedarbejdernr As String
Dim svar As String
'Linjenr = 1
SourceFileName = Me.txtSourceFile
TargetFileName = Me.txtTargetFile
Me.MSFlexGrid2.Clear
Me.MSFlexGrid2.Rows = 1
    With MSFlexGrid2
        .TextMatrix(0, 0) = "nr"
        .TextMatrix(0, 1) = "Dato"
        .TextMatrix(0, 2) = "Varenr"
        .TextMatrix(0, 3) = "Antal"
    End With
Open SourceFileName For Input As #1
  Do While Not EOF(1)
        Line Input #1, Linje
        Linjenr = Linjenr + 1
    Loop
Close #1
svar = MsgBox("Du er ved at impoterer " & Linjenr & " Poster. Tryk OK for at fortsætte", vbOKCancel, " Importer data fra dantid")

If svar = vbOK Then  'Importerer datafil fra DANTID
Screen.MousePointer = 11
    Linjenr = 1
    Open TargetFileName For Output As #2
    Close #2
    Open SourceFileName For Input As #1
      Do While Not EOF(1)
        Line Input #1, Linje
        importerlinje (Linje)
        Linjenr = Linjenr + 1
      Loop
    Close #1
    Screen.MousePointer = 1
    'mbox ("Du har nu importeret " & linjenr & " poster")
  Else
    Exit Sub
  End If
 
fejl:
    If Err.Number = 0 Then
        Exit Sub
    End If
    Mbox (Err.Description)
    Mbox (Linje)
    Exit Sub
End Sub


Public Sub importerlinje(Linje As String)
On Error GoTo fejl


Dim stDocName As String
Dim stLinkCriteria As String
Dim Pos As Single
Dim Medarbejdernr As Single
Dim Dato, nydato As String
Dim Ordrenrstr, tidsforbrugstr As String
Dim Ordrenr, Terminal As Double
Dim aktivitet As Single
Dim Regtid, starttid, sluttid, Lønart, terminalstr, Antalstr, antalgodestr  As String
Dim Tidsforbrug As String
Dim tid As Double
Dim antal As Double
Dim AntalGode, AntalSkrot As Integer
Dim exlinje As String
Dim varenr As String

Pos = 0
        TargetFileName = Me.txtTargetFile
        Medarbejdernr = Left(Linje, 5)
        Dato = Mid(Linje, 6, 6)
        nydato = Left(Dato, 2) + "-" + Mid(Dato, 3, 2) + "-" + Right(Dato, 2)
        Ordrenrstr = Mid(Linje, 12, 10)
        Ordrenr = Val(Ordrenrstr)
        aktivitet = Mid(Linje, 22, 6)
        Regtid = Mid(Linje, 28, 5)
        starttid = Mid(Linje, 33, 5)
        sluttid = Mid(Linje, 38, 5)
        Lønart = Mid(Linje, 43, 4)
        terminalstr = Mid(Linje, 47, 4)
        Terminal = Val(terminalstr)
        Antalstr = Mid(Linje, 51, 9)
        antal = Val(Antalstr)
        Tidsforbrug = Mid(Linje, 59, 9)
        tid = Val(Tidsforbrug)
        If antal <> "0" Then
          For i = 1 To Len(Antalstr)
                Pos = Pos + 1
                CH = Mid(Antalstr, Pos, 1)
                If CH = "." Then
                    punktum = True
                    antalgodestr = Left(Antalstr, (Pos - 1))
                    AntalGode = Val(antal)
                    AntalSkrot = Right(Antalstr, (Len(Antalstr) - Pos))
                Else
                    punktum = False
                    AntalGode = Right(Val(Antalstr), 7)
                End If
          Next
         
        Else
            AntalGode = 0
            AntalSkrot = 0
        End If
        If Ordrenr = "1" Or antal = "0" Then
            Exit Sub
        Else
            varenr = Left(Ordrenr, 3) & "-" & Mid(Ordrenr, 4, 3)
            If aktivitet >= 130 And aktivitet < 140 Then
                varenr = varenr & "P130"
                exlinje = nydato & ";" & varenr & ";" & Val(AntalGode)
                Open TargetFileName For Append As #2
                    Write #2, exlinje
                Close #2
                Me.MSFlexGrid2.AddItem (Linjenr & vbTab & nydato & vbTab & varenr & vbTab & Val(AntalGode))
            Else
                Select Case aktivitet
                    Case 9000
                        varenr = varenr & "P140"
                        exlinje = nydato & ";" & varenr & ";" & Val(AntalGode)
                        Me.MSFlexGrid2.AddItem (Linjenr & vbTab & nydato & vbTab & varenr & vbTab & Val(AntalGode))
                        Open TargetFileName For Append As #2
                            Write #2, exlinje
                        Close #2
                    Case 9010
                        varenr = varenr & "P150"
                        exlinje = nydato & ";" & varenr & ";" & Val(AntalGode)
                        Me.MSFlexGrid2.AddItem (Linjenr & vbTab & nydato & vbTab & varenr & vbTab & Val(AntalGode))
                        Open TargetFileName For Append As #2
                            Write #2, exlinje
                        Close #2

                    Case 9020
                        varenr = varenr & "P160"
                        exlinje = nydato & ";" & varenr & ";" & Val(AntalGode)
                        Me.MSFlexGrid2.AddItem (Linjenr & vbTab & nydato & vbTab & varenr & vbTab & Val(AntalGode))
                        Open TargetFileName For Append As #2
                            Write #2, exlinje
                        Close #2
                    Case 9030
                        varenr = varenr & "P170"
                        exlinje = nydato & ";" & varenr & ";" & Val(AntalGode)
                        Me.MSFlexGrid2.AddItem (Linjenr & vbTab & nydato & vbTab & varenr & vbTab & Val(AntalGode))
                        Open TargetFileName For Append As #2
                            Write #2, exlinje
                        Close #2
                    Case 9040
                        varenr = varenr
                        exlinje = nydato & ";" & varenr & ";" & Val(AntalGode)
                        Me.MSFlexGrid2.AddItem (Linjenr & vbTab & nydato & vbTab & varenr & vbTab & Val(AntalGode))
                        Open TargetFileName1 For Append As #3
                            Write #3, exlinje
                        Close #3
               
                End Select
            End If
            exlinje = Dato & ";" & varenr & ";" & Val(AntalGode)
           
        End If
fejl:
   
    If Err.Number = 0 Then Exit Sub
    Mbox (Err.Description & "  " & Err.Number)
    Mbox (Linje)
    Exit Sub

End Sub
Avatar billede martin_moth Mester
19. november 2003 - 10:38 #6
Jeg forstår ikke hvorfor de optræder. Prøv lige at skriv
  Msgbox exlinje
lige efter du skriver til filen. Kommer der også " med der?
Avatar billede martin_moth Mester
19. november 2003 - 10:41 #7
I øvrigt:

Dim Regtid, starttid, sluttid, Lønart, terminalstr, Antalstr, antalgodestr  As String

betyder at antalgodestr bliver dimmet som String, resten som variant. Skal alle være strings, så skriv en på hver linie. Bare en detalje!
Avatar billede martin_moth Mester
19. november 2003 - 10:44 #8
nydato bliver oprettet på baggrund af noget du læser ind fra en fil. Hvordan står dataene i den fil du læser fra - her de et " i sig? Det kunne være en forklaring på det forreste "
Avatar billede soenderhegn Nybegynder
19. november 2003 - 11:18 #9
MsgBox(Exlinje) indeholder ikke ""

Exempel på sourecefilelinje
00035181103010220040100023006:4507:0015:061213000300991,007000007,60

vedr. dim kan det så være årsagen??

Dette kommer nok til at koste mig nogle flere point!!!
Tak for din indsats.
Modulet konverterer tekst fil fra tidsregistrerings system og til en indlæsningsfil i navigator.
modulet kan sparer for en masse lager bogføring
Avatar billede martin_moth Mester
19. november 2003 - 11:25 #10
Hvis msg-boxen køres lige forinden du skriver til filen, og den IKKE indeholder " kan der KUN blive indsat " i følgende linie

  Write #3, exlinje

Det giver ikke mening!

Nu du er ved at rette bør du nok dimme en variabel pr. linie, men jeg er 99% sikker på at det ikke løser dit problem. Jeg fatter ikke hvor de " kommer fra.

Det svarer jo til at du laver et helt nyt program

Dim Linie as String
Linie = "Hej med dig"
msgbox Linie
Open "C:\test.txt For Append As #1
  Write #1, linie
Close #1

Der vil (bør) ikke komme " ind, i filen test.txt bør der i nederste linie stå:
Hej med dig
(uden ")
(prøv evt 'programmet' af)
Avatar billede soenderhegn Nybegynder
19. november 2003 - 11:31 #11
Resultat af din kode:
"Hej med dig"
Avatar billede martin_moth Mester
19. november 2003 - 11:44 #12
???

Prøv at skriv
  Open "C:\test.txt For Output As #1
i stedet for...
Avatar billede martin_moth Mester
19. november 2003 - 11:46 #13
Du har jo ret - det gør det også. Vender tilbage...
Avatar billede martin_moth Mester
19. november 2003 - 11:53 #14
Jeg var overbevist om at der ikke kom " i mit lille kodeeksempel - det vill ejeg æde min hat på at der ikke jgjorde i VB. Men der gør altså i VBA 8som jeg testede med), og så gør der åbenbart også i VB.

Jeg aner ikke hvordan du undgår det. En klodset måde er at lave en lille procedure, der åbner filerne, og fjerner første og sidste tegn i hver linie hvis tegnet er et ".

Måske andre kan hjælpe?

TIl alle andre:

For at koge det ned:

Koden:

Dim Linie as String
Linie = "Hej med dig"
msgbox Linie
Open "C:\test.txt For Append As #1
  Write #1, linie
Close #1

Output bliver en linie i filen test.txt, der ser sådan ud:
"Hej med dig"

Hvordan undgår "'erne
Avatar billede martin_moth Mester
19. november 2003 - 11:54 #15
PS: vi taler vel VB og ikke VBA?
Avatar billede soenderhegn Nybegynder
19. november 2003 - 13:14 #16
Selv om problemet ikke er løst for du point for god ihærdighed.

Tak for hjælpen.
Avatar billede martin_moth Mester
19. november 2003 - 13:20 #17
Prøv at oprette et nyt a la det jeg skrev 19/11-2003 11:53:28, og præciser om det er VBA eller VB.

Jeg er 99% sikker på at jeg har lavet VB-programmer hvor disse " ikke optræder - så måske er det en VBA-ting (ved stadig ikek om du taler vb eller vba)
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