Christoph Posted January 24, 2005 Share Posted January 24, 2005 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 More sharing options...
Meme Posted January 24, 2005 Share Posted January 24, 2005 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 More sharing options...
Mr Andersson Posted January 24, 2005 Share Posted January 24, 2005 Ä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 More sharing options...
Christoph Posted January 24, 2005 Author Share Posted January 24, 2005 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 More sharing options...
Christoph Posted January 24, 2005 Author Share Posted January 24, 2005 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 More sharing options...
Mr Andersson Posted January 24, 2005 Share Posted January 24, 2005 Testade du min kod? Link to comment Share on other sites More sharing options...
Christoph Posted January 24, 2005 Author Share Posted January 24, 2005 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 More sharing options...
Christoph Posted January 24, 2005 Author Share Posted January 24, 2005 Ah - nu förstod jag hur du menade... Jag hoppade fram 3-4 ggr genom "readline"... Tack för hjälpen!!! Link to comment Share on other sites More sharing options...
Mr Andersson Posted January 24, 2005 Share Posted January 24, 2005 Ah - nu förstod jag hur du menade... Jag hoppade fram 3-4 ggr genom "readline"... Exakt... Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.