ok1 Posted February 4, 2007 Report Share Posted February 4, 2007 (edited) Ir vajadzība pēc iespējas ievietot datus/tekstu konkrētā faila rindā (starp rindām). Piemēram, ja ir fails ar saturu: 111111 2222 444 5555 un es gribu starp 2 un 3 rindu ievietot jaunu rindu ar tekstu 33333 lai rezultāts būtu : 111111 2222 33333 444 5555 Kā lai to panāk? Edited February 4, 2007 by ok1 Link to comment Share on other sites More sharing options...
Stopp Posted February 4, 2007 Report Share Posted February 4, 2007 Varētu aptuveni šādi. $fails='file.txt'; $f=file($fails); $c=count($f); $rinda=4; // kurā rindā rakstam (1. rinda ir 0) $txt='kaka'; //teksts, ko rakstīt $cont=''; for($i=0;$i<$rinda;$i++) $cont .= $f[$i]."\r\n"; $cont .= $txt."\r\n"; for($i=$rinda;$i<$c;$i++) $cont .= $f[$i]."\r\n"; fputs(fopen($fails, "w"), $cont); Link to comment Share on other sites More sharing options...
ok1 Posted February 4, 2007 Author Report Share Posted February 4, 2007 (edited) Stopp, kaut kas tavā skriptā ir līks. Katru reizi izveidojas vairak tukšu līniju. Ja vienreiz tad ir kaut kas tāds: 111111 2222 33333 444 5555 Varētu jau iztikt, bet diezgan neglīti izskatās EDIT: Izdevās salabot. Ņemot vērā to, ka parasti līnijas failā jau ir atdalītas: $fails='file.txt'; $f=file($fails); $c=count($f); $rinda=4; // kurā rindā rakstam (1. rinda ir 0) $txt='kaka'; //teksts, ko rakstīt $cont=''; for($i=0;$i<$rinda;$i++) $cont .= $f[$i].""; $cont .= $txt."\r\n"; for($i=$rinda;$i<$c;$i++) $cont .= $f[$i].""; fputs(fopen($fails, "w"), $cont); Edited February 4, 2007 by ok1 Link to comment Share on other sites More sharing options...
andrisp Posted February 4, 2007 Report Share Posted February 4, 2007 Tāpēc, ka Stopp piemērs pieado vēl klāt \r\n, kaut gan file atgriež array, kur katrai līnijai ir klāt new line. No php.net/file: Each element of the array corresponds to a line in the file, with the newline still attached. Link to comment Share on other sites More sharing options...
bubu Posted February 4, 2007 Report Share Posted February 4, 2007 1) ielasi failu ar file() fju 2) iespraud masīvā elementu (piem ar array_slice fjas palīdzību) 3) ieraksti atpakaļ - file_put_contents('fails.txt', implode('', $array)); Link to comment Share on other sites More sharing options...
Stopp Posted February 4, 2007 Report Share Posted February 4, 2007 Ah, pareiz, file() patur lainbreiku. Link to comment Share on other sites More sharing options...
blackhalt Posted February 5, 2007 Report Share Posted February 5, 2007 Man šitā iznāca: <?php $teksts='kaka'; $linija=3; $fails='file.txt'; $panjemt=file($fails); $saskaita=count($panjemt); if($saskaita<=$linija){ $atver=fopen($fails,'a'); fwrite($atver,"\n".$teksts); fclose($atver); }else{ $pumpis=''; foreach($panjemt as $cik => $ko){ if($cik==$linija){ $pumpis.=$teksts."\n"; } $pumpis.=$ko; } $atver=fopen($fails,'w'); fwrite($atver,$pumpis); fclose($atver); } ?> Link to comment Share on other sites More sharing options...
Roze Posted February 5, 2007 Report Share Posted February 5, 2007 Un kā šādi? <? $teksts='kaka'; $linija=3; $fails='file.txt'; $txt = file($fails); array_splice($txt , ($linija-1), 0, array($teksts."\n")); $f = fopen($fails,'w'); fwrite($f,implode($txt)); fclose($f); ?> Ja ir PHP5 tad pēdējās 3 rindas var nomainīt ar <? file_put_contents($f,implode($txt)); ?> Bet ja splice funkcija vēl pareizi atgrieztu arī rezultējošo array varētu pavisam kruta (tagad diemžēl nestrādā): <? file_put_contents($fails,implode(array_splice(file($fails), $linija-1, 0, array($teksts."\n")))); ?> Link to comment Share on other sites More sharing options...
blackhalt Posted February 5, 2007 Report Share Posted February 5, 2007 Neierakstīs 0 un pēdējā rindā. Link to comment Share on other sites More sharing options...
Roze Posted February 5, 2007 Report Share Posted February 5, 2007 Neierakstīs 0 un pēdējā rindā. Atkarībā kā tu skaiti.. Ja kā programmētājs sākot ar 0 tad vienkārši $linija-1 vietā jāliek $linija.. Ja kā "normāls" cilvēks ar 1 tad ierakstīs arī "nulltajā" un pēdējā rindā. Pie kam operēt ar 0 vērtībām variabļos ne vienmēr ir forši .. teiksim nestrādā if($linija) .. isset/isint nava forši ;) Pirmā rinda: <? $arr = array(0=>'a',1=>'b',2=>'c'); array_splice($arr, 0, 0, array('value'."\n")); print_r($arr); ?> Array ( [0] => value [1] => a [2] => b [3] => c ) Pēdējā rinda: <? $arr = array(0=>'a',1=>'b',2=>'c'); array_splice($arr, 3, 0, array('value'."\n")); print_r($arr); ?> Array ( [0] => a [1] => b [2] => c [3] => value ) Vēl kādi iebildumi? Link to comment Share on other sites More sharing options...
Recommended Posts