Wuu Posted January 17, 2008 Report Posted January 17, 2008 Kur tādu var dabūt? Urbu manuālu līdz paliku dusmīgs ,pilnīgi vemt gribas... Vienīgo veidu atradu fgets ,bet tas tak ir muļķīgi jo fgets atgriež līniju. Bet man tik vien vajag kā aiziet uz līniju un viss.
Wuu Posted January 17, 2008 Author Report Posted January 17, 2008 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?
bubu Posted January 17, 2008 Report Posted January 17, 2008 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.
Wuu Posted January 17, 2008 Author Report Posted January 17, 2008 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..
blackhalt Posted January 17, 2008 Report Posted January 17, 2008 Ja nav baigi liels tas fails, tad var šitā: <?php $lines = file('text.txt'); echo $lines[3]; ?>
Wuu Posted January 17, 2008 Author Report Posted January 17, 2008 Ja nav baigi liels tas fails, tad var šitā: <?php $lines = file('text.txt'); echo $lines[3]; ?> nu re :) senx!
bubu Posted January 17, 2008 Report Posted January 17, 2008 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.
Aleksejs Posted January 17, 2008 Report Posted January 17, 2008 Nezinuu, kā Tu, bubu, bet es jau esmu pieradis, ka Wuu neatbild uz uzdotajiem jautājumiem. Laikam viņam labs spama filtrs un, diemžēl, viņa izpratnē mēs esam spams... ;)
Wuu Posted January 17, 2008 Author Report Posted January 17, 2008 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"...
bubu Posted January 17, 2008 Report Posted January 17, 2008 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.
mounkuls Posted January 18, 2008 Report Posted January 18, 2008 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.
blackhalt Posted January 18, 2008 Report Posted January 18, 2008 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.
Wuu Posted January 18, 2008 Author Report Posted January 18, 2008 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!
Recommended Posts