14. november 2000 - 19:40Der er
27 kommentarer og 2 løsninger
Skrive en linje til en txtfil.
Kan jeg skrive bare en linje til en txtfil i toppen. Uden at skulle loade hele filen. Den måde jeg har lært det på, er at gemme hver linje som en værdi i et arrey. Altså noget i retningen af:
CommonDialog1.ShowSave Open CommonDialog1.FileName For Output As #1 For pnummer = 0 To 6 Print #1, person(pnummer) Next Close #1
Det tvivler jeg på er muligt. Du kan tilføje i slutningen med: Open Filename for Append as #1
Men for at undgå det med arrays kan du bruge to filer: Open fil1 for input as #1 Open fil2 for output as #2 for pnummer = 0 to 6 print #2, person(pnummer) Next Do while EOF(1)=False Line input #1, string print #2, string Loop Close #1 Close #2
FileCopy fil2, Fil1 Kill fil2
Kill hvis du vil rydde op. Du kan nemlig godt åbne en fil for output, selv om den i forvejen ikke eksisterer.
Det du har fat i, er random acces til en fil. Det du skal bruge er sekvensiel access.
Prøv at se om du kan bruge følgende:
Sub OpenTextFile( ) Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 3 Dim fso \'Fil System Objekt Dim textfil \'TextStream Fil
Set fso = CreateObject(\"Scripting.FileSystemObject\") Set textfil = fso.OpenTextFile( path , ForWriting , True , TristateFalse) textfil.WriteLine \"linie der skal skrives til fil\" textfil.Close End Sub
Tak steven det virkede. Du kunne vel ikke forklare torie lidt nærmere. Jeg fandt selv ud af, at man skulle bruge call OpenTextFile (har lavet lidt ASP).
\'Konstanter der bruges til at fortælle om man skal læse, skrive eller vedhæfte på filen Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 3
\'Erklæring af to variable. fso er et fil system objekt, som skal bruges når man skriver til en fil på denne måde. textfil, er den variabel, som repressenterer filen når vi bruger fso Dim fso \'Fil System Objekt Dim textfil \'TextStream Fil
\'fso initialiseres Set fso = CreateObject(\"Scripting.FileSystemObject\")
\'filen på disken (path) bliver åbnet, ForWriting indikerer at vi ønsker at skrive i filen der kunne lige så godt have stået 2, true fortæller at en ny fil skal oprettes - false fortæller at der ikke oprettes en fil, tristateFalse åbner filen i ASCII - tristateTrue fortæller at filen åbnes i UniCode Set textfil = fso.OpenTextFile( path , ForWriting , True , TristateFalse)
\'Her bliver der skrevet en linie i filen textfil.WriteLine \"linie der skal skrives til fil\"
Jeg kan godt se at Steven er inde i sagen, jeg er bare VB-amatør. Men lur mig om problemet med overskrivning af de første linier løses med \"fso\". Jeg har nemlig en laaaang DOS-fortid med meget direkte skrivning til ascii-filer.
Bakker op om tdaudaard\'s løsning, der er nu engang ikke grund til at gøre det mere besværligt end højst nødvendigt. Blot skal man huske at hvis der indlæses til en gammel (fixed-length) streng er man stadig underlagt 64kb grænsen
Alle ikke-fixed-strings skulle befinde sig på heapen og ikke i datasegmentet (i hvert fald i VB6), så der skulle ikke være fare for 64K segment overskridelser her.
Bortset fra dette er joern\'s teknik bestemt stadig brugbar, da han indlæser filen post for post fremfor hele filen på én gang. Lidt afhængig af filstørrelsen kan dette være fordelagtigt.
Tak for det Buhl. Jeg kender godt metoden med at indlæse en hel fil i én streng, men vil også mene der kan opstå problemer, hvis den er stor. Med \"Line Input\" er det ascii-værdi 13 der skiller posterne. Ved indlæsning af en fil i en større tekstboks med multiline=true giver det en nydelig gengivelse af det oprindeligt indtastede. Dette anvender jeg jævnligt, men det er jo en anden sag.
Jeg blev ellers forbavset over at der var 17 kommentarer i timen på spørgsmålet her.
tdaugaard> Det var noget jeg læste i msdn for nogen tid siden. Og så vidt jeg husker stod der noget med fixed/non-fixed strings, og noget med en 64kb grænse. Det kan da godt være jeg husker galt, i så fald... damn it :-)
privaten:> hæ hæ .. jeg kan huske der er den grænse i QBasic meen ..
Synes godt om
Ny brugerNybegynder
Din løsning...
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.