Avatar billede gravbamzula Nybegynder
20. november 2001 - 10:57 Der er 14 kommentarer og
1 løsning

Text ind i en fil

Jeg skal have lagt nogle linjer ind i en text fil. Det er i sig selv ikke ret svært, problemet er bare at vi snakker om en del linjer! og med win98 vil den ikke lave filen størrer end en forud (af win98)bestemt størrelse.
Avatar billede pellelil Nybegynder
20. november 2001 - 11:02 #1
Hvad vil det sige at: \"vil den ikke\"? Bliver den ikke større? får du en fejl? og i så fald hvilken? Hvad/hvordan gør du i dag?
Avatar billede gravbamzula Nybegynder
20. november 2001 - 11:05 #2
Jeg bruger en memobox og SAVETOFILE men filen bliver aldrig mere end ca 56kb og den kommer ikke med fejl....
Avatar billede pellelil Nybegynder
20. november 2001 - 11:08 #3
Det er således ikke W98 der har et problem, men din memobox. Prøv at kigge på kommandoen (og eksemplet for) \"Append\" proceduren.

<SNIP>
var

  f: TextFile;
begin
  if OpenDialog1.Execute then
  begin                    { open a text file }
    AssignFile(f, OpenDialog1.FileName);
    Append(f);
    Writeln(f, \'I am appending some stuff to the end of the file.\');
    { insert code here that would require a Flush before closing the file }
    Flush(f);  { ensures that the text was actually written to file }
    CloseFile(f);
  end;

end;
</SNIP>
Avatar billede borrisholt Novice
20. november 2001 - 11:27 #4
Pelle >> Det ER windows 98, eler rettere dens memmory håndtering, og hele den gamle snak, med kode sekmenter og alt det det .... Dele af Win98\'s kærne er stadig 16 Bit !

Jens B
Avatar billede gravbamzula Nybegynder
20. november 2001 - 11:33 #5
borrisholt >> Hvad kan kan jeg gøre ved det???
Avatar billede pellelil Nybegynder
20. november 2001 - 11:35 #6
borrisholt> Vil du påstå at W98 ikke kan håndtere filer større end 64K? Eller at code segment størrelse kan have indflydelse på fil størrelse?.
Avatar billede borrisholt Novice
20. november 2001 - 11:38 #7
Nej jeg vil påstå at den skal hjælpes hvis du fx skal gemme en fil stører end 64 KB.

Dit forslag vil være et godt bud ... Dog har jeg ikke prøvet det ...

Jens B
Avatar billede pellelil Nybegynder
20. november 2001 - 11:40 #8
Jeg har i test-øjemed rodet med BlockRead/BlockWrite og denne har ingen problemer hverken med størrelse eller hastighed, men har ikke specifik testet om Append/WriteLn har problemer (dog kan jeg IKKE forestille mig at det skulle give problemer).
Avatar billede unclebug Nybegynder
20. november 2001 - 13:16 #9
Jeg er ret sikker på at en Windows edit box (som f.ex. TMemo) kun kan indeholde en begrænset mængde i Win98, hvor den i NT og 2K kun er begrænset af RAM.
Avatar billede borrisholt Novice
20. november 2001 - 13:20 #10
unclebug >> Du har næsten ret .. En TMemo har samme begrænsninger som notepad .. På WIN98 er der vist omkring 64 kb, hvor i mod det på NT er 2GB. For at komme ud over probelmet på 98 kan du bruge en Richedit.

Problemet på NT kan også læses ved at skifte dit OS ud med 64-Bits udgaven af XP :-)

Jens B
Avatar billede jenshertz Nybegynder
21. november 2001 - 11:28 #11
Problemet er måske at filen skal åbnes før den kan skrives til... Man burde næsten allokere pladsen i filen, direkte på disk - og så skrive direkte til nogle tomme sektorer på disken...
Jeg kan se om jeg kan finde noget kode til dette.
Avatar billede pellelil Nybegynder
21. november 2001 - 11:40 #12
jenshertz> Dels lyder \"direkte-sektore-access\" som fuldstændig overkill, og hvis der blot er tale om \"en simpel tekstfil\" burde det ikke være nødvendigt at \"afsætte splads\".

Problemet er Memo\'s SaveToFile under W98 er \"begrænset\", og dette kan nemt løses ved at man append\'er til filen og skriver linierne en af gangen med WriteLn (en BlockWrite kan sikkert også bruges til at tilføje \"Memo.Text\" i et hug).
Avatar billede jenshertz Nybegynder
21. november 2001 - 11:52 #13
Hvorfor bruger du memos?

Prøv komponenten TStringList til at ændre med...
Jeg bruger den selv meget - men den kan kun have noget i stil med 65000 linjer - så jeg ved ikke om det er nok.

Eks. :

procedure WriteText(Text,Fil: String; Linje: Integer);
var
  List: TStringList;
begin
  List:=TStringList.Create;
  List.LoadFromFile(Fil);
  List.Insert(Linje,Text); // Eller omvendt...
  List.SaveToFile(Fil);
  List.Free;
end;

Håber det virker i dit tilfælde.
Avatar billede calundan Nybegynder
22. november 2001 - 21:00 #14
Du kan også benytte \"CreateFileMapping\" og \"MapViewOfFile\", fra win32 biblioteket.

Dette gør at du kan åbne et view på en fil af en vilkårlig størrelse og så flytte dit view på filen ind i ram. På lidt den sammen måde som et vindue med scrollbars.
Avatar billede borrisholt Novice
23. november 2001 - 08:57 #15
Brug en RichEdit i stedet for en TMemo så er du overe alle dine problemer !

Jens B
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester