Php循环从csv文件中跳过一些行

时间:2018-01-06 12:06:32

标签: php csv

我不是程序员,也不为别人做脚本。这仅供我个人使用。我得到了帮助创建下面的代码。如果您能帮助我解决以下代码中的错误,我将不胜感激。

下面的代码从all.csv文件中提取硬币列表。每枚硬币都在它的独立线上。目前all.csv文件(197)总共有197个硬币。

拉出的硬币插入到用于从交易视图小部件(https://www.tradingview.com/widget/ticker/)中提取数据的脚本中

使用下面的当前代码,脚本可以工作,但是: 它跳过硬币(线)34到55(包括34和55)。 它跳过166-176之间的硬币(包括第166和第176枚硬币)。 此外,它没有显示188(包括188)之后的硬币。

示例行如下:(它们之间没有空格。)我无法想象堆栈溢出中的新行。在代码中,如果我改变" delta"到15它跳过31-60行

BITTREX:NAVBTC

BITTREX:WAVESBTC

BITTREX:ETCBTC

BITTREX:SALTBTC

BITTREX:ARDRBTC

<?php
$tickers = array();
$f = fopen("all.csv", "r");
while (($line = fgetcsv($f)) !== false) {
 $lines = explode("\r", $line[0]);
  foreach ($lines as $cell) { 
  $tickers[] = $cell;
  }
}
fclose($f);
?>
<?php
$start = 0;
$delta = 11;
for($i = 0; $i <= (int)(count($tickers)/$delta); $i += 1) {
$t = array_slice($tickers, $start, $delta);
$out = implode('"}, {"description": "","proName": "', $t);
echo '<script src="https://s3.tradingview.com/external-embedding/embed-widget-tickers.js">{
"symbols": [{"description": "","proName": "'.$out.'"}],
    "locale": "en"
}</script>';
$start += $delta;
}
?>

1 个答案:

答案 0 :(得分:0)

首先,您似乎使用回车符“\ _”将文件分隔为行。虽然如果文件是在Windows中生成的,这可能会有效,但如果全部或部分文件来自Linux或其他只使用“\ n”而不是“\ r \ n”的操作系统,那么它将不起作用。

其次,你可以省去一些痛苦,并使用file()函数(http://php.net/manual/en/function.file.php)为你做所有的文件打开和行分割,并将结果整齐地放入一个数组中,例如:

$lines = file("all.csv");
foreach ($lines as $cell) {
    // etc...
}