해당 텍스트 파일의 이름은 fp.txt이며 각 줄에 01, 02, 03, 04, 05, ... 10이 포함되어 있습니다.PHP에서 파일 포인터를 이전 줄로 이동하는 방법?
01
02
...
10
코드 :
<?php
//test file for testing fseek etc
$file = "fp.txt";
$fp = fopen($file, "r+") or die("Couldn't open ".$file);
$count = 0;
while(!(feof($fp))){ // till the end of file
$text = fgets($fp, 1024);
$count++;
$dice = rand(1,2); // just to make/alter the if condition randomly
echo "Dice=".$dice." Count=".$count." Text=".$text."<br />";
if ($dice == 1){
fseek($fp, -1024, SEEK_CUR);
}
}
fclose($fp);
?>
그래서 때문에 fseek과 ($ FP, -1024, SEEK_CUR)의; 제대로 작동하지 않습니다. 필자가 원하는 것은 주사위 == 1 인 경우 파일 포인터를 이전 줄, 즉 현재 줄보다 한 줄 위로 설정하는 것입니다. 하지만 음수 값은 파일 포인터를 파일 끝으로 설정하고 파일의 실제 끝 부분 앞에 while 루프를 끝내는 것입니다.
원하는 출력은 다음과 같습니다 주사위 2 때마다, 텍스트가 이전과 동일하다는 것을
가Dice=2 Count=1 Text=01
Dice=2 Count=2 Text=02
Dice=2 Count=3 Text=03
Dice=1 Count=4 Text=03
Dice=2 Count=5 Text=04
Dice=2 Count=6 Text=05
Dice=2 Count=7 Text=06
Dice=1 Count=8 Text=06
Dice=1 Count=9 Text=06
Dice=2 Count=10 Text=07
.... //and so on until Text is 10 (Last Line)
Dice=2 Count=n Text=10
참고. 이제는 Dice = 1의 첫 번째 발생에서 멈추고 있습니다.
기본적으로 제 질문은 파일 포인터를 이전 행으로 이동/재배치하는 방법입니다.
dice = rand (1,2)는 단지 예입니다. 실제 코드에서 $ text는 문자열이고 string이 특정 텍스트를 포함하지 않을 때 조건이 참인 경우입니다.
EDIT : 원하는 해결 두 샘플 (@hakre의 & 광산)가 작동된다. 주사위가없는 경우
당신이 배열에 파일을 변환 할 경우가 쉬울 것이다 ['파일()'(http://php.net/file)와 배열을 조작 할 수 있습니다. – flowfree
파일에 1000 개 이상의 행이 포함될 수 있다는 설명을 추가하려고했습니다. 그래서 모든 파일을 한번에 하나의 배열에 로딩하는 것은 최적이라고 생각하지 않습니다. – DavChana
파일의 모든 라인이 알려진 길이인지, 또는 알려진 길이의 가능한 범위 이상입니까? – DaveRandom