Vinnaren i pepparkakshustävlingen!
2009-03-25, 11:33
  #1
Medlem
Tja,

Sitter med ett gäng extremt stora textfiler (17-18 GB). De innehåller sorterad data i tab-delimited kolumner. Ur dessa behöver jag extrahera information på vissa rader, tex alla rader vars första kolumn är med ERICSSON. Filerna innehåller information om cirka 4000 bolag och jag behöver extrahera 400 av dessa.

Har ni några bra tips på hur jag skall göra detta?

Jag har tidigare provat att skriva en batch fil som använder dos kommandot findstr.exe, men problemet är att det tar cirka 40 minuter per körning (x 400 körningar x 20 filer).

Min nästa tanke var att lägga in det i Sql Server, men det går också extremt sakta (sitter på en laptop ) och logg filerna blir enormt stora. Jag är heller inte jättevass på Sql server.

Alla tankar eller funderingar kring problemet uppskattas!!
Citera
2009-03-25, 11:49
  #2
Medlem
Playcontrols avatar
Citat:
Ursprungligen postat av Freidrich
Tja,

Sitter med ett gäng extremt stora textfiler (17-18 GB). De innehåller sorterad data i tab-delimited kolumner. Ur dessa behöver jag extrahera information på vissa rader, tex alla rader vars första kolumn är med ERICSSON. Filerna innehåller information om cirka 4000 bolag och jag behöver extrahera 400 av dessa.

Har ni några bra tips på hur jag skall göra detta?

Jag har tidigare provat att skriva en batch fil som använder dos kommandot findstr.exe, men problemet är att det tar cirka 40 minuter per körning (x 400 körningar x 20 filer).

Min nästa tanke var att lägga in det i Sql Server, men det går också extremt sakta (sitter på en laptop ) och logg filerna blir enormt stora. Jag är heller inte jättevass på Sql server.

Alla tankar eller funderingar kring problemet uppskattas!!

Menar du att du vill rensa bort alla företag som inte är ericsson relaterade?
Har du exel så importera .txt som tab-separerad välj MS-dos PC8, och sedan sorterar du allt efter den kolumn företagsnamnen står i.

Därefter kan du ju lätt ta bort alla rader som är andra företag.

Eller har jag förstått fel? Såhär brukar jag göra iaf.
Citera
2009-03-26, 00:14
  #3
Medlem
Horatiuss avatar
Så stora filer tar alltid en del resurser att bearbeta.
Själv skulle jag nog läsa textfilerna radvis med hjälp av valfritt programmeringsspråk, för att sedan pumpa ut de rader du vill kvar till en ny fil.

Jag har gjort liknande saker i både C# och VBA, dock inte så stora filer.

Eventuellt kan du ju dela upp filerna i flera mindre innan du bearbetar dem.
Citera
2009-03-26, 11:04
  #4
Medlem
Citat:
Ursprungligen postat av Playcontrol
Menar du att du vill rensa bort alla företag som inte är ericsson relaterade?
Japp det stämmer,
Citat:
Ursprungligen postat av Playcontrol
Har du exel så importera .txt som tab-separerad välj MS-dos PC8, och sedan sorterar du allt efter den kolumn företagsnamnen står i.

Därefter kan du ju lätt ta bort alla rader som är andra företag.

Eller har jag förstått fel? Såhär brukar jag göra iaf.

Problemet är att begränsningen i excel 2007 är 1 miljon rader (65k i excel 2003), jag har cirka 100-150 miljoner rader beroende på fil.

Jag har testat att köra ett perlscript som väljer ut de rader som skall vara kvar och det verkar funka hjälpligt, även om det tar en bra stund för datorn att processa (dock mindre än 40 min per bolag som med findstring)

Har nån några andra tips och idéer så är det uppskattat!!
Citera
2009-03-26, 11:49
  #5
Medlem
Citat:
Ursprungligen postat av Freidrich
Tja,

Sitter med ett gäng extremt stora textfiler (17-18 GB). De innehåller sorterad data i tab-delimited kolumner. Ur dessa behöver jag extrahera information på vissa rader, tex alla rader vars första kolumn är med ERICSSON. Filerna innehåller information om cirka 4000 bolag och jag behöver extrahera 400 av dessa.

Har ni några bra tips på hur jag skall göra detta?

Jag har tidigare provat att skriva en batch fil som använder dos kommandot findstr.exe, men problemet är att det tar cirka 40 minuter per körning (x 400 körningar x 20 filer).

Min nästa tanke var att lägga in det i Sql Server, men det går också extremt sakta (sitter på en laptop ) och logg filerna blir enormt stora. Jag är heller inte jättevass på Sql server.

Alla tankar eller funderingar kring problemet uppskattas!!
Med största sannolikhet är det inte programmet som är problemet, utan läs- och skrivhastigheten på din hårddisk. Nu vet ju inte jag vad för sort du har, men mellan tummen och pekfingret låter det som att du har full spätta med det du beskriver. Ska du titta på hastighetsspecifikationer gäller det att inte bli lurad av "burst"-hastigheter, utan titta på vad som fås av kontinuerlig drift och därtill vad samtidig läsning och skrivning gör för prestandan.

Så; lägg allt på en snabbare maskin i stället för att mecka med databasprogram och sådant. Det finns ju scsi, raptor-diskar och sådant. Kanske är en fördel att ha två diskar, läs från en och skriv till en annan. Hör med någon som kan de där grejerna.
Citera
2009-03-26, 12:36
  #6
Medlem
Citat:
Ursprungligen postat av Katalysator
Med största sannolikhet är det inte programmet som är problemet, utan läs- och skrivhastigheten på din hårddisk....

...Så; lägg allt på en snabbare maskin i stället för att mecka med databasprogram och sådant. Det finns ju scsi, raptor-diskar och sådant. Kanske är en fördel att ha två diskar, läs från en och skriv till en annan. Hör med någon som kan de där grejerna.

Jo jag har nog börjat inse att det är där begränsningen ligger, med perl scriptet har jag iaf lyckats få full processorkapacitetsutnyttjande men hårddisken är nog den svaga länken.

Läste om en kille som behandlat liknande filer och filstorlekar fast 5 gånger så många och för honom hade det tagit en timme att köra, fast då på en server med 60 stycken 64-bitars processorer, inte riktigt vad jag har hemma
Citera
2009-03-29, 20:10
  #7
Medlem
Jag gjorde en webapp förut som läste in rader från excelark, var väl någon miljon rader. Gick väldigt snabbt så rekomenderar dig att köra på det

Gjorde även en gräns så att den sätter in ca 4000 rader i taget och ersätta även nollor och sånt direkt med en procedur på sql servern istället för att ta med nollorna i inläsningen, det ökade avsevärt tiden.. dock så vet jag inte hur och vad för data dina txt filer innehåller
Citera
2009-04-08, 00:00
  #8
Medlem
Tackar för tipsen, det slutade med att jag kör ett perl-script som sorterar ut datan och gör beräkningar, går extremt smidigt i jämförelse!
Citera
2009-04-13, 21:29
  #9
Medlem
Vart i helsike får man tag på 18 GB textfiler? Möjligtvis om man har en jäkligt stor sql databas men då får det fan vara större än Flashback..
Jobbar du för regeringen?
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback