Как удалить все строки в файле до появления определенного слова Stack Overflow

У меня есть несколько файлов, содержащих одинаковую текстовую структуру. Я сейчас пытаюсь удалить все строки, пока строка не начинается с определенного слова.
Это часть одного из файлов:

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

1

Решение

Вы можете просто добавить лишнюю логику, чтобы сначала найти строку «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);
}
2

Другие решения

Может быть, я что-то упустил, но должно работать следующее:

$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;
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector