Jump to content
php.lv forumi

fGoToLine


Wuu

Recommended Posts

Ko tev vajag dabūt?

Neko :) Man vajag aiziet uz ļiniju!

 

text.txt

1
2
3
4
5
6
7

man vajag aiziet uz līniju 4 un izdzēst visu kas zem viņas!

 

tas ir while caur fgets saglabājot visas rindas ,tad iztukšot to failu un pa jaunu rakstīti iekšā! Tā sanāk jobcik?

Link to comment
Share on other sites

Ja līnijām ir patvaļīgs garums, tad nekas cits kā lasīt rindas pa vienai un apstāties pie vajadzīgās, tev nespīd. Kā tu domā kā gan php vai OS varētu zināt, kur tev 10 gigabaitu failā ir 543115 rindas sākums?

Ja līnijām vari garantēt fiksētu garumu, tad ar fseek viegli vari aiziet uz vajadzīgās rindas sākumu.

Link to comment
Share on other sites

Ja līnijām ir patvaļīgs garums, tad nekas cits kā lasīt rindas pa vienai un apstāties pie vajadzīgās, tev nespīd. Kā tu domā kā gan php vai OS varētu zināt, kur tev 10 gigabaitu failā ir 543115 rindas sākums?

Ja līnijām vari garantēt fiksētu garumu, tad ar fseek viegli vari aiziet uz vajadzīgās rindas sākumu.

Skaidrs :) Un ar par OS nezinu ,bet uz 50x neattīstītākas valodas to var izdarīt un te nevar aii..

Link to comment
Share on other sites

lol, tu vispār saproti, ko tas kods dara?

file funkcija ielasa visu failu atmiņā. Tā vienkārši "neaiziet" uz n-to rindiņu/līniju. Ja fails paliks lielāks, tad tavs php skripts sākumā vienkārši bremzēs, bet pēc tam krašos, kad pārsniegsi php.ini failā norādīto max atļauto izmantojamo atmiņas daudzumu.

Tikpat labi jau varēji ar fread/file_get_contents ielasīt visu failu un pēc tam explore pēc \n taisīt. Dabūtu tieši to pašu efektu.

Link to comment
Share on other sites

lol, tu vispār saproti, ko tas kods dara?

file funkcija ielasa visu failu atmiņā. Tā vienkārši "neaiziet" uz n-to rindiņu/līniju. Ja fails paliks lielāks, tad tavs php skripts sākumā vienkārši bremzēs, bet pēc tam krašos, kad pārsniegsi php.ini failā norādīto max atļauto izmantojamo atmiņas daudzumu.

Tikpat labi jau varēji ar fread/file_get_contents ielasīt visu failu un pēc tam explore pēc \n taisīt. Dabūtu tieši to pašu efektu.

Pēc katrā ieraksta funkcija nogriež visu kas iet tālāk pec 20 "\n"...

Link to comment
Share on other sites

Nepareizi esi sapratis. Tā neko nenogriež. Tā atgriež VISU, ko nolasa.

file funkcija nolasa VISU failu atmiņā, atdalot rindas, kuras saliek masīvā pēc kārtas un atgriež šo masīvu.

Ja tev fails būs 2 megabaiti ar 20000 rindām, tad file funkcija nolasīs un atgriezīs VISAS rindas.

Link to comment
Share on other sites

Pēc katrā ieraksta funkcija nogriež visu kas iet tālāk pec 20 "\n"...

file() ielasis visu failu, jedrjon-baton!

Pareizi te raksta ka psc bus pie lielakiem faila izmeriem.

funkcija nevar nogriezt funkciju file() nu nekadi!

Ja tiesham vajag uz failiem, iesaku izstukot ne viena faila rakstit, bet vairakos nosaucot failus pec kadas sistemas lai tie ir mazaki pec izmera un atbilst meklesanas prasibam ertak meklet vajadzigo.

Link to comment
Share on other sites

Jā, iespējams file() iebremzē, bet es pagaidām te neredzu kādu citu alternatīvu risinājuma piedāvājumu ar fseek, fgetc, fgets un tml.

 

Mans vecais bloks bija uz TXT failiem un lielākais fails tur sasniedza tikai 900 KiB (kopā 720 ieraksti), tajā glabājās visi raksti kopā, to izmantoju tikai specifiskām vajadzībām. Nekas i nebremzēja i ne kā.

Tā man katram rakstam bija atsevišķs fails.

Komentāri kopā aizņēma 417 KiB. Arī atsevišķs fails katram rakstam.

Link to comment
Share on other sites

Nepareizi esi sapratis. Tā neko nenogriež. Tā atgriež VISU, ko nolasa.

file funkcija nolasa VISU failu atmiņā, atdalot rindas, kuras saliek masīvā pēc kārtas un atgriež šo masīvu.

Ja tev fails būs 2 megabaiti ar 20000 rindām, tad file funkcija nolasīs un atgriezīs VISAS rindas.

OMG

 

function cutline($line_no=-1) {
 $filename = 'last20img.txt';
 $strip_return=FALSE;
 $data=file($filename);
 $pipe=fopen($filename,'w');
 $size=count($data);
 if($line_no==-1) { $skip=$size-1; } else  { $skip=$line_no-1; }
 for($line=0;$line<$size;$line++)
 if($line!=$skip) { fputs($pipe,$data[$line]); } else { $strip_return=TRUE;}
 return $strip_return;
}

Google atradu! cutline(20); pēc katra ievada un viss!

Link to comment
Share on other sites

×
×
  • Create New...