Toon posts:

[VB] frustrerend probleem met importeren Textfile

Pagina: 1
Acties:
  • 142 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ok, ik wordt hier langzamerhand gek van.
Ik heb een fixed lenght file dat uit een achterliggend systeem komt. Deze wil ik importeren in een access db. Makkelijk toch gewoon ff MID() gebruiken. Dacht ik ook. Wat blijkt, er zitten in sommige records vbNullString's waardoor hij vreemd gaat doen.

Wat is vreemd? Nou stel er staat als record in de textfile:

1234****5678

(* symboliseerd een vbNullstring/CHR(0))

dan lees ik deze regel in (bv. in een string strData) en dan ziet hij alleen 1234. Dus denk ik, kom: REPLACE(strData, vbNullstring, "") -> verbeterd niets, blijft 1234.

Dus denk ik dat ik helemaal gek ben en importeer ik de file via de in access standaard ingebouwde importfunctie en die maakt er wel netjes 1234567 van. Nou breek mijn klomp.

Weet iemand raad hoe ik mijn code netjes kan laten lezen, want om aan gebruikers te gaan vragen of ze even alle textfiles met de hand gaan importeren is geen optie.

Thanx 1e10

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 24-05 14:12

Crazy D

I think we should take a look.

Waarde eerst in een tempstring stoppen, en dan pas in de 'definitieve' string. Als je een rijtje getallen met een nullstring erin in een integer wil stoppen, gaat 'ie het niet helemaal snappen en kapt 'ie 'm af bij de 1e nullstring. Als je 'm eerst in een tempstringetje stopt, gaat het beter.

Ff simpel getest:
code:
1
2
3
4
5
6
Dim s As String
s = "123" & Chr$(0) & "456"

Dim k As Integer, l As String
l = Mid(s, 2, 4)
k = Replace(l, Chr$(0), "")

k moet dus uiteindelijk 234 zijn als het goed werkt.
Als je k = (s, 2, 4) doet, wordt het 23.
Als je het zoals hierboven doet, wordt l eerst 23NullString4, en via de replace wordt het dan 234.

Kan misschien best handiger maar zo werkt het tenminste wel ;)

edit:
Val(Mid(s, 2, 4)) werkt trouwens ook gewoon... gooit VB zelf die nullstring weg...

Exact expert nodig?


Verwijderd

Topicstarter
helaas, werkt niet. FF voorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Private Sub Command1_Click()
    
    Dim strData As String
   
    Dim objFSO
      
    y = 0
    
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    
    
    Dim objTextStream
      
    Const strFileName = "C:\My Documents\CONTACT WEEK 19 2001.TXT"
    
    
    x = 0
    
    If objFSO.FileExists(strFileName) Then
      '//Bestand bestaat dus openen en output genereren
      Set objTextStream = objFSO.OpenTextFile(strFileName, fsoForReading)
            
      Do While Not objTextStream.AtEndOfStream
        
        strData = objTextStream.ReadLine
              
        If Trim(Mid(strData, 33, 7)) = "GKKTRN" Then
            y = Val(Replace(Mid(strData, 252, 11), vbNullString, ""))
            Text(1).Text = Text(1).Text & vbNewLine & "Origineel: " & Mid(strData, 252, 11) & " regel: " & x
            Text(1).Text = Text(1).Text & vbNewLine & "Nieuw: " & y
        End If
                
        x = x + 1
      Loop
      
      objTextStream.Close
    
      Set objTextStream = Nothing
         
    Else
      '//Oeps, bestand bestaat niet
      MsgBox strFileName & " was not found."
    End If
     
    '//Cleanup
    Set objFSO = Nothing
    
End Sub

Is dit wat duidelijker?

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 24-05 14:12

Crazy D

I think we should take a look.

Vervang trouwens de vbNewLine voor een vbCrLf (Carriage return & line feed), da's de moderne versie van newline ;)

Maarre ik snap het probleem niet...
Nogmaals getest...
code:
1
2
3
4
5
Dim s As String
s = "abc123def123" & Chr$(0) & "456zzz"

Dim i As Long
i = Replace(Mid(s, 10, 7), Chr$(0), "")

En i is gewoon braafjes 123456.

Ik gebruik zelf nooit het filesystemobject om ff een file in te lezen, maar ik neem aan dat 'ie wel gewoon de hele regel inleest, en die nullstrings volledig negeert (?).

Paste hier anders ff 1 regel uit het bestand zoals 'ie in strData komt te staan, misschien dat het daardoor duidelijker wordt, maar (ook) de bovenstaande code dondert gewoon vrolijk die nullstring weg...

(vraag me trouwens wel af waarom er nullstrings in voorkomen... :) heb best een hoop met importeren en exporteren gedaan, maar nullstrings in m'n bestandjes... nee... ;) )

Exact expert nodig?