Just nu i M3-nätverket
Jump to content

Från text till Access - tappar bort poster


Christoph

Recommended Posts

Hej,

 

jag försöker importera ett stort text-fil (25 mb med över 600.000 rader) till (tyvärr...) Access. Detta är koden:

 

  [b]Server[/b].ScriptTimeout = 2500
  [color="#0000ff"]Set[/color] fs=[b]Server[/b].[color="#0000ff"]CreateObject[/color]([GRÅ]"Scripting.FileSystemObject"[/GRÅ])
  [color="#0000ff"]Set[/color] f=fs.OpenTextFile([b]Server[/b].MapPath([GRÅ]"a.txt"[/GRÅ]), 1)
  [color="#0000ff"]Dim[/color] conn
  [color="#0000ff"]Set[/color] conn = [b]Server[/b].[color="#0000ff"]CreateObject[/color]([GRÅ]"ADODB.Connection"[/GRÅ])

  Conn.Open([GRÅ]"DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="[/GRÅ] & [b]Server[/b].MapPath([GRÅ]"nix.mdb"[/GRÅ]))
  Conn.[color="#0000ff"]Execute[/color] ([GRÅ]"Delete * from Nix"[/GRÅ])
  RiktNrOut = [GRÅ]""[/GRÅ]
  [color="#0000ff"]Do[/color] [color="#0000ff"]While[/color] f.AtEndOfStream = [color="#0000ff"]False[/color]
    i = i + 1
    RiktNr = [color="#0000ff"]Left[/color](f.ReadLine, 8)
    TelNr = [color="#0000ff"]Right[/color](f.Readline, [color="#0000ff"]Len[/color](f.ReadLine)-8)
    RiktNr = [color="#0000ff"]Trim[/color](riktnr)
    TelNr = [color="#0000ff"]Trim[/color](telnr)
    Conn.[color="#0000ff"]Execute[/color] ([GRÅ]"Insert Into Nix (RiktNr, TelNr) Values('"[/GRÅ] & RiktNr & [GRÅ]"', '"[/GRÅ] & TelNr & [GRÅ]"')"[/GRÅ])
    [color="#0000ff"]If[/color] RiktNrOut <> RiktNr [color="#0000ff"]Then[/color]
      [b]Response[/b].Write RiktNr & [GRÅ]" ("[/GRÅ] & i & [GRÅ]"); "[/GRÅ]
      RiktNrOut = RiktNr
    [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
  [color="#0000ff"]Loop[/color]
  Conn.Close
  F.Close
  [color="#0000ff"]Set[/color] f=[color="#0000ff"]Nothing[/color]
  [color="#0000ff"]Set[/color] fs=[color="#0000ff"]Nothing[/color]

 

Det funkar i princip rätt bra - problemet är dock att ca. 2/3 av inläggen inte importeras... Jag skrev ut när RiktNr ändras (If RiktNrOut <> RiktNr Then Response.Write RiktNr & " (" & i & "); ")), för att kunna hålla koll på vad som händer och för att kunna se radnummret i text-filen, men det är ett mysterium - den byter riktnr redan vid ca. 3.043, även om nästa rikt-nr i text-filen först borde komma i rad 9.100... Varför skrivs inte alla inlägg i Access-databasen? Läses dem inte? Hoppar min loop över en massa rader? Varför isf?

 

Tacksam för all hjälp!!!

 

Christoph

 

[inlägget ändrat 2005-01-24 18:52:02 av Christoph]

Link to comment
Share on other sites

Helt omöjligt att veta om du inte postar en bit av textfilen så vi får se vilket format den har.

 

När du gör en ReadLine läses nästa rad in, inte samma rad, ser verkligen textfilen ut så med riktnummer på en rad, telnummer på nästa och såvidare ?

 

Gör readline EN gång per loop, spara denna i en variabel och använd sedan denna när du plockar ut de olika delarna,

 

Link to comment
Share on other sites

Är det inte så att varje gång man kör "readline" så läses en ny rad in?

 

Testa detta (ersätt relevanta rader i din kod med dessa) :

 

 

Do While f.AtEndOfStream = False

i = i + 1

raden = f.ReadLine

 

RiktNr = Left(raden, 8)

TelNr = Right(raden, Len(raden)-8)

 

 

 

 

Link to comment
Share on other sites

Detta är ett exempel på filen:

 

011       123456                        
011       234567                        
011       345678                        
011       456789

 

RiktNr och TelNr visas rätt, från samma rad.

 

Link to comment
Share on other sites

Helt rätt - jag får ut 615.000 inlägg som variabeln i räknar.

 

Kör jag med att spara inläggen i Access-databasen, räknar den upp till 205.158 och dumpar ner dessa inlägg i Access... Mysko...

 

/Christoph

 

Link to comment
Share on other sites

Det håller på att köras och det verkar se rätt okej ut:

 

011 (2); 0120 (9158); 0121 (9948); 0122 (10914); 0123 (12436); 0125 (12933); 013 (13215); 0140 (25564); 0141 (26933); 0142 (30035); 0143 (32318); 0144 (32866); 0150 (33130); 0151 (35256); 0152 (35782); 0155 (37168); 0156 (42151); 0157 (42958); 0158 (44147); 0159 (45023); 016 (45734); 0171 (51510); 0173 (54888); 0174 (55981); 0175 (56657); 0176 (57606); 018 (59523); 019 (76555); 021 (87509); 0220 (95788); 0221 (97314); 0222 (98820); 0223 (99087); 0224 (100517); 0225 (102048); 0226 (103906); 0227 (105996); 02270 (106412); 023 (106413); 0240 (110571); 0241 (113654); 0243 (114465); 0246 (118734); 0247 (119193); 0248 (120392); 0250 (120915);

 

Det som visas i parentes är rad-nummret. Hur kommer det sig att din kod funkade men inte min?

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...