Как удалить первые 11 строк в файле с помощью PHP?

У меня есть файл 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 и поместить оставшееся содержимое в текстовый файл. Как мне это сделать?

2

Решение

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

Вместо этого разберите файл построчно:

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);
}
2

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

У меня есть файл 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.

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

1

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

$content = file($url);

$newContent = array_slice($content, 12);

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

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

  1. Почему в этом CSV есть дополнительный контент?
  2. Как вы узнаете, сколько линий отрезать? Что делать, если сократить более 11 строк?
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector