Как удалить первые 11 строк в файле с помощью PHP? - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть файл CSV, в котором я хочу удалить первые 11 строк. Файл выглядит примерно так:

"MacroTrends Data Download"
"GOOGL - Historical Price and Volume Data"
"Historical prices are adjusted for both splits and dividends"

"Disclaimer and Terms of Use: Historical stock data is provided 'as is' and solely for informational purposes, not for trading purposes or advice."
"MacroTrends LLC expressly disclaims the accuracy, adequacy, or completeness of any data and shall not be liable for any errors, omissions or other defects in, "
"delays or interruptions in such data, or for any actions taken in reliance thereon.  Neither MacroTrends LLC nor any of our information providers will be liable"
"for any damages relating to your use of the data provided."


date,open,high,low,close,volume
2004-08-19,50.1598,52.1911,48.1286,50.3228,44659000
2004-08-20,50.6614,54.7089,50.4056,54.3227,22834300
2004-08-23,55.5515,56.9157,54.6938,54.8694,18256100
2004-08-24,55.7922,55.9728,51.9454,52.5974,15247300
2004-08-25,52.5422,54.1672,52.1008,53.1641,9188600

Я хочу только данные об акциях и ничего больше. Поэтому я хочу удалить первые 11 строк. Также будет несколько текстовых файлов для разных тикеров. Так что str_replace не представляется приемлемым вариантом. Функция, которую я использовал для получения файла CSV и помещения необходимого содержимого в текстовый файл:

 function getCSVFile($url, $outputFile)
    {
        $content = file_get_contents($url);
        $content = str_replace("date,open,high,low,close,volume", "", $content);
        $content = trim($content);
        file_put_contents($outputFile, $content);
    }

Я хочу общее решение, которое может удалить первые 11 строк из файла CSV и поместить оставшееся содержимое в текстовый файл. Как мне это сделать?

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

Используйте file(), чтобы прочитать его как массив и просто обрезать первые 11 строк:

$content = file($url);

$newContent = array_slice($content, 12);

file_put_contents($outputFile, implode(PHP_EOL, $newContent));

Но ответьте на эти вопросы:

  1. Почему в этом CSV есть дополнительный контент?
  2. Как вы узнаете, сколько линий отрезать? Что делать, если сократить более 11 строк?
0 голосов
/ 08 ноября 2018

Каждый пример здесь не будет работать для больших / больших файлов. Людям сейчас наплевать на память. Вы, как великий программист, хотите, чтобы ваш код был эффективным и занимал мало памяти.

Вместо разбора файла строка за строкой:

function saveStrippedCsvFile($inputFile, $outputFile, $lineCountToRemove)
{
    $inputHandle = fopen($inputFile, 'r');
    $outputHandle = fopen($outputFile, 'w');

    // make sure you handle errors as well
    // files may be unreadable, unwritable etc…

    $counter = 0;
    while (!feof($inputHandle)) {
        if ($counter < $lineCountToRemove) {
            ++$counter;
            continue;
        }

        fwrite($outputHandle, fgets($inputHandle) . PHP_EOL);
    }

    fclose($inputHandle);
    fclose($outputHandle);
}
0 голосов
/ 08 ноября 2018

У меня есть файл CSV, в котором я хочу удалить первые 11 строк.

Я всегда предпочитаю использовать explode для этого.

$string = file_get_contents($file);
$lines = explode('\n', $string);
for($i = 0; $i < 11; $i++) { //First key = 0 - 0,1,2,3,4,5,6,7,8,9,10 = 11 lines
    unset($lines[$i]);
}

Это удалит его и с помощью implode вы сможете создать из него новый «файл»

$new = implode('\n',$lines);

$new будет содержать новый файл

Не проверял, но я уверен, что это будет работать

Будь осторожен! Я процитирую @emix его комментарий.

Это не получится, если содержимое файла превышает доступную память PHP.

Убедитесь, что файл не слишком большой

...