PHP изменить TXT файл



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



"http://something.net/something-ak/41389_718783565_1214898307_q.jpg"
"http://something.net/something-ak/372142_106502518141813_1189943482_q.jpg"
and so on


Я хочу использовать PHP, чтобы открыть файл и удалить все до первого " _ "и все после второго"_", поэтому я заканчиваю с этим:



718783565
106502518141813
and so on


Дело в том, что я действительно не знаю, как это сделать.

Вот что у меня есть до сих пор:



<?PHP
$file_handle = fopen("ID.txt", "rb");

while (!feof($file_handle) ) {

$line_of_text = fgets($file_handle);
$parts = explode('n', $line_of_text);

// Remove everything before the first "_" and everything after the last "_".
// echo the line
}

fclose($file_handle);
?>


Может кто - нибудь помочь мне заполнить пробелы?

652   5  

5 ответов:

Вот что я бы сделал, хотя регулярное выражение может быть короче или эффективнее:

$file_handle = fopen("ID.txt", "rb");
while (!feof($file_handle) )
{
    $line_of_text = fgets($file_handle);
    $parts = explode("\n", $line_of_text);

    foreach ($parts as $str)
    {
        $str_parts = explode('_', $str); // Split string by _ into an array
        array_shift($str_parts); // Remove first element
        echo current($str_parts)."\n"; // echo current element and newline
        // Same as $str_parts[0]
    }
}
fclose($file_handle);

Демо: http://codepad.org/uFbVDtbR

Ничего особенного, но $lines может быть лучшим именем переменной вместо $parts.

Если вам нужно записать это обратно в файл, вы можете сделать следующее:

ob_start();
// code used above
$new_content = ob_get_clean();
file_put_contents("ID.txt", $new_content);

Релевантно список литературы:

Просто используйте файл в цикле

$content = "";
foreach(file("ID.txt", FILE_SKIP_EMPTY_LINES) as $line){
    $parts = explode('_', $line);
    $content .=  $parts[1] . "\n";
}
file_put_contents("ID.txt", $content);

Если вы хотите достичь этого с помощью awk,

awk -F _ '{print $2}' ID.txt

Попробуйте это

Preg_match('/(.* ?) (.+?) (.*) /', $ line,$matches);

$matches[2] даст требуемую строку

Это должно сработать

<?php
// open files
$file_handle = fopen("ID.txt", "rb");
$new_file_handle = fopen("ID2.txt", "wb");

while (!feof($file_handle) ) {
  $str = fgets($file_handle);
  $start = strpos($str, '_'); // find first "_"
  $end = strpos($str, '_', $start + 1); // find next "_"
  $newstr = substr($str, $start + 1, $end - $start - 1) . "\n";
  fputs($new_file_handle, $newstr);
}
// close files
fclose($file_handle); 
fclose($new_file_handle);
// rename
rename("ID2.txt", "ID.txt");
$TXT = file_get_contents(__DIR__.'/in.txt');
$NewTXT = preg_replace('~^.+/[0-9]+_([0-9]+)_.+?$~mi', '$1', $TXT);
file_put_contents(__DIR__.'/out.txt', $NewTXT);

Просто переименуйте .txt файлы соответственно.

Comments

    Ничего не найдено.