Wuu Posted January 17, 2008 Report Share 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. Link to comment Share on other sites More sharing options...
bubu Posted January 17, 2008 Report Share Posted January 17, 2008 Ko tev vajag dabūt? Link to comment Share on other sites More sharing options...
Wuu Posted January 17, 2008 Author Report Share 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? Link to comment Share on other sites More sharing options...
bubu Posted January 17, 2008 Report Share 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. Link to comment Share on other sites More sharing options...
Wuu Posted January 17, 2008 Author Report Share 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.. Link to comment Share on other sites More sharing options...
blackhalt Posted January 17, 2008 Report Share Posted January 17, 2008 Ja nav baigi liels tas fails, tad var šitā: <?php $lines = file('text.txt'); echo $lines[3]; ?> Link to comment Share on other sites More sharing options...
bubu Posted January 17, 2008 Report Share Posted January 17, 2008 Uz kuras tad valodas tu to vari izdarīt? Link to comment Share on other sites More sharing options...
Wuu Posted January 17, 2008 Author Report Share Posted January 17, 2008 Ja nav baigi liels tas fails, tad var šitā: <?php $lines = file('text.txt'); echo $lines[3]; ?> nu re :) senx! Link to comment Share on other sites More sharing options...
bubu Posted January 17, 2008 Report Share 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. Link to comment Share on other sites More sharing options...
Aleksejs Posted January 17, 2008 Report Share 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... ;) Link to comment Share on other sites More sharing options...
Wuu Posted January 17, 2008 Author Report Share 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"... Link to comment Share on other sites More sharing options...
bubu Posted January 17, 2008 Report Share 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. Link to comment Share on other sites More sharing options...
mounkuls Posted January 18, 2008 Report Share 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. Link to comment Share on other sites More sharing options...
blackhalt Posted January 18, 2008 Report Share 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. Link to comment Share on other sites More sharing options...
Wuu Posted January 18, 2008 Author Report Share 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! Link to comment Share on other sites More sharing options...
Recommended Posts