У меня есть несколько файлов, содержащих одинаковую текстовую структуру. Я сейчас пытаюсь удалить все строки, пока строка не начинается с определенного слова.
Это часть одного из файлов:
Test Sampertant
ALL 5784
COMMENT This files contains information about infomarxinc
COMMENT Companie located in USA
FEATURES Location/Qualifiers
A lines (7709..2170)
3'try complement(7676..7678)
/note="stop"/label=STOP
B lines (7679..7708)
/note="stop"/label=start
PAST
1 talian and American multinational corporation and is the world’s
50 eighth largest auto maker.The group was established in late 2014
Я хочу сохранить только строки после прошлого
Я написал следующий код, чтобы сделать это
$lines = file($newname);
# Loop through the array
foreach($lines as $line) {
$seq = trim($line);
# Find all lines starting with a number
if (preg_match('/^\d/', $seq)){
# Replace all number with |
$seq = preg_replace('/[0-9]+/', '', $seq);
$seq = preg_replace('/\s/',"",$seq);
# Store in string
$out .= $seq;
}
### Read lines into file ###
$f = fopen($newname, "w");
fwrite($f, $out);
fclose($f);
}
С большинством файлов это работает, пока я не получил этот файл. Строка перед PART началась с 3’try. И в моем конечном результате был добавлен 3’try, но я не хотел этого. Как я могу теперь удалить все строки, пока моя строка не начинается со строки PAST, а затем выполнить мой код, чтобы найти все строки, начинающиеся с цифры.
Чтобы сохранить только эти строки для этого файла:
1 talian and American multinational corporation and is the world’s
50 eighth largest auto maker.The group was established in late 2014
Вы можете просто добавить лишнюю логику, чтобы сначала найти строку «PART», прежде чем писать пронумерованные строки:
…
$lines = file($newname);
$found = false;
// Loop through the array
foreach($lines as $line) {
$seq = trim($line);
if( $seq == "PAST" )
$found = true;
// Find all lines starting with a number
if ($found && preg_match('/^\d/', $seq)){
# Replace all number with |
$seq = preg_replace('/[0-9]+/', '', $seq);
$seq = preg_replace('/\s/',"",$seq);
# Store in string
$out .= $seq;
}
// Read lines into file
$f = fopen($newname, "w");
fwrite($f, $out);
fclose($f);
}
Может быть, я что-то упустил, но должно работать следующее:
$raw = file_get_contents($filename);
if (! $raw) {
echo 'no valid data';
exit;
}
$cut = strpos($raw,'PAST');
if (! $cut) {
echo 'PAST not found in file';
exit;
}
echo substr($raw,$cut + 5);
exit;
Другой вариант, как вы сказали, все файлы имеют одинаковую структуру:
$raw = file_get_contents($filename);
if (! $raw) {
echo 'no valid data';
exit;
}
$lines = explode("\n",$raw); // assume \n as the line return
$lines = array_splice($lines,13);
echo join("\n",$lines);
exit;