Zdravim uzivatelov fora, stretol som sa pri rieseni jednej ulohy do skoly s problemom:
Mam typovy subor, je v nom okolo 10 zaznamov, ked chcem napriklad jeden zaznam vymazat zo suboru, co by som mal pouzit? prehladal som cely help TP ale ziadnu funkciu som nenasiel, tak som to vyriesil takto:
premenujem subor, vytvorim novy subor s povodnym nazvom a z premenovanehi kopirujem vsetky zaznamy okrem toho ktory som chcel odstranit zo suboru. ono to funguje ale keby bolo v subore viac zaznamov tak by to asi dlho trvalo.
Fórum › Pascal
Typove subory
To lukas : Funkciu na mazanie dat zo suboru som este nevidel ;) Na vyriesenie tvojej ulohy by som pouzil podobny postup ako si navrhoval, ale trochu zjednoduseny: otvorit subor na citanie, nacitat z neho vsetky data do pamate, odstranit alebo vynechat nepotrebny zaznam. zatvorit subor. potom ten isty subor otvorit na rewrite a vsetky potrebne data zapisat spat.
Přesně tak - jinak než překopírováním s vynecháním mazané položky to nejde.
Pokud ale máš opravdu velký soubor, který nechceš nebo nemůžeš pořád celý přepisovat, můžeš v něm tu jednu položku přepsat a dát jí nějakou hodnotu, kterou budeš považovat za "smazáno". Udělá se to tak, že před otevřením souboru nastavíš předdefinovanou globální proměnnou Filemode na hodnotu 2 (tj. čtení i zápis, je to v helpu; myslím, že ta dvojka je dokonce defaultní nastavení). Pak soubor otevřeš Resetem, příkazem Seek najedeš na tu xtou položku (číslují se od nuly) a příkazem Write ji přepíšeš.
Trochu si tím zkomplikuješ čtení souboru, protože budeš muset rozlišovat platné a "prázdné" položky podle hodnoty, ale u několikamegabytových databází to vychází jako výhodnější varianta.
Moje stránka.
dakujem za rady, necham to tak ako to je, je to len mala evidencia
Ahoj, existuje Truncate-Smazani vsech polozek od aktualni az do konce souboru. Syntaxe: Truncate(soubor); Proste to odrizne kus souboru. Pokud neni setrizeny staci prohodit posledni a tu kterou chces smazat, presunout se na posledni (seek) a truncate. Pokud je setrizeny tak musis vsechny od toho, co chces smazat, posunout o 1 dole, cimz prepises i ten smazany, ale na konci bude 1 misto prazdne- to urezes.
Tohle je offtopic, ale docela zajímavé:
Víte, jak v mžiku vytvořit soubor o libovolné velikosti, třeba i v řádu stovek megabajtů?
Procedure VytvorSoubor(s:string;velikost:longint);
var f:file;
a:byte;
begin
Assign(f,s);
Rewrite(f,1);
a:=0;
if velikost>1 then Seek(f,velikost-1);
if velikost>0 then BlockWrite(f,a,1);
Close(f);
end;
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Typove subory v LAZARUS — založil matesko
Python - súbory — založil Pal_lac
Hlavickove subory — založil Tom@sQo
*.dat subory — založil delphak
Moderátoři diskuze