26. september 2003 - 17:38Der er
9 kommentarer og 1 løsning
opdeling af en tekstfil ?
Hej.
Nogen her der har en ide til at lave et eller andet form for script der kan opdele en tekstfil på 11MB.
Ideen er at den skal opdele filen i filer af en given max. størrelse. eks. 500 kb. på en sådanne måde at den ikke deler en linie men stopper inden den tager den linie der bryder grænsen.
eks. ------------------ dette er en test dette er en test dette er en test <<< her deles filen >>> ------------------ dette er en test dette er en test dette er en test ------------------
Du skal blot åbne filen som en tekstfil, og så blive ved med at læse hele linier. Det er der en ordre til. Du skal løbende opsamle liniernes længde i en variabel af type Long, og samtidig gemme de læste linier en ny tekstfil. Når du har læst 500*1024*1024 tegn lukker du din nye fil, og begynder på en ny. Desværre har jeg ikke en VB-håndbog ved hånden, så jeg kan gøre det mere detaljeret.
Du ville måske være lige så glad for et VBscript, der laver denne opdeling?
Det er vist 5. gang jeg ser nogen bruge ordet "script" om VB6 i dag. VB6 er ikke script! - script kompileres hver gang det afvikles (fx. i en browser eller på en server), og VB6 er et programmeringssprog, der kompileres en gang (fx. til en .exe)
martin du har ganske ret, og siden du ved så meget om programmering, hvad enten det er script eller programmeringsprog. hvor er din løsning ??? ;)
nmh. om det er script eller vb programmering er mere eller mindere underordnet, da jeg kan tyde dem begge, men ikke er så hardcore endnu til at se løsningen. (self. pga af at det er nemmere at tyde end at skabe ;) )
Her er så en VBscript løsning. Nedenstående skal gemmes med filnavnet SplitFil.vbs. Scriptet skal blot ligge i det underkatalog, hvor filen, der skal splittes, ligger. Jeg har testet med en lille fil, og har sat filstørrelsen for de små filer til 50.
Option Explicit dim StorFil, LilleFil, fil, filsystem, streamInd, streamUd dim Max, FilNr dim txtlinie, N, L
StorFil="Tekstfil.txt" 'Her skrives navnet på filen, der skal splittes Fil="TxtFil" 'De små filer vil nu hedde TxtFil1.txt, TxtFil2.txt...
Max=50 'Grænse for, hvornår der skiftes til ny udskriftsfil FilNr=1
set filsystem=CreateObject("Scripting.FileSystemObject") set streamInd=Filsystem.OpenTextFile(StorFil)
Sub NyFil LilleFil=Fil & filNr & ".txt" set streamUd=FilSystem.OpenTextFile(LilleFil,8,true) end sub
NyFil while not streamInd.AtEndOfStream txtlinie=streamInd.readline L=Len(txtlinie)+2 'LF og CR tælles med if N+L<=Max then streamUd.writeline(txtlinie) N=N+L else streamUd.close FilNr=FilNr+1 NyFil streamUd.writeline(txtlinie) N=L end if wend streamUd.close streamInd.close Msgbox "Den store filen blev splittet i " & FilNr & " filer"
Martin, hehe jada jeg er jo heller ikke sur, havde bare håbet på at du måske kunne komme med en god ide. ;)
nmh, tak for svaret, det ser fint ud og jeg er sikker på vi nok skal få det flettet sammen med vores funktioner her, manglede bare lige lidt ide´er til den her.
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.