21. juni 2012 - 19:40Der er
13 kommentarer og 1 løsning
Indlæsning af ASCII fil i .NET
Hej,
Jeg skal indlæse en ASCII-fil som bliver skudt ud gennem et eksternt system en gang hvert kvarter ca.
Filen er en eksport af en eller flere tabeller fra en database, og min idé er at samle op på data i filen, som jeg så efterfølgende vil skyde ind, mere struktureret, i en tabel i en SQL Server. En webapplikation vil være online til at tilgå disse data.
Er der et libary eller en bestemt metode der ville være best practice til den slags, ud over mulighederne i System.IO?
Et andet spørgsmål går på, at en indlæsning af en fil på et par MB og efterfølgende opdatering af en tabel i SQL, kan tage lidt tid. Hvad så med tilgængeligheden af tabellen imens importen står på? Ville man skulle lave en midlertidig tabel som dataene først sendes til eller kan man udnytte en form for cache eller lignende?
System.IO til at laese filen og System.Data.Whatever til at gemme i databasen med boer virke fint. Lidt afhaengig af fil formatet kan der muligvis suppleres med andet.
Tabellen vil stadig vaere tilgaengelig mens du loader data ind i den.
Hej Arne - tak for svaret. - Et sidespørgsmål, er eksport som ASCII-fil ikke lidt forældet i det hele taget? Det er det eneste der tilbydes, men ville en WebService eller en XML-fil ikke være mere at foretrække, eller er ASCII stadig et simpelt output til indlæsning, rent performance-mæssigt?
Strengt taget er ASCII kun en encoding og ikke et format.
Men "ASCII-fil" bruges normalt omkring CSV eller andre lidt aeldre formater.
Ja. Hvis det fil format skulle defineres idag ville man nok vaelge XML fremfor CSV. Og encoding ville blive UTF-8 fremfor ASCII.
Web services vil betyde et skift fra offline til online og det er mere end bare et format skift.
Jeg er heller ikke overbevist om at en web service er den rigtige loesning her. Maaske ville det vaere bedre hvis det andet system publishede data til en message queue og dit system saa subscribede.
Ok - så det vil sige at det højst sandsynligt er en CSV-fil jeg modtager? Men ja, ASCII er vel en encoding, men forvirrer lidt da extension på den er .ASC. Systemet der spytter der ud er ikke specielt up to date, så det er nok den eneste mulighed.
Men der er så ikke noget performance-mæssigt issue ved at læse ind i SQL'en en gang hvert kvarter via et cron job?
"Message queue" har jeg ikke hørt om før, hvor bruges dette? (for ren nysgerrigheds skyld)
Message queue bruges til asynch kommunikation. Ved request response sender A request til B og B sender response tilbage til A. Ved message queue sender A til queue og det kan modtages af ingen, en eller mange B.
Jeg har set et par mere kreative løsninger derude mht. indlæsning, men er den simpleste løsning ikke bare at loope igennem rækkerne og splitte op ved komma og så køre en INSERT?
Eller er det praktisk at loade det ind i et dataset først, og så loope det igennem med en INSERT?
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.