Jump to content
php.lv forumi

Ierakstīšana konkrētā faila rindā


ok1

Recommended Posts

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 by ok1
Link to comment
Share on other sites

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

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 by ok1
Link to comment
Share on other sites

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

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

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

×
×
  • Create New...