【发布时间】:2015-10-01 16:20:28
【问题描述】:
我正在尝试计算第一个 .csv 文件行的列数。
这是我的文件内容(CRLF -> 回车和换行): 测试.csv
A;B;C;crlf
脚本:
$handle = fopen($filePath,'r');
$data = fgetcsv($handle, 1000, ";");
print_r($data) . PHP_EOL;
echo 'column nr.: ' . count($data) . PHP_EOL;
输出:
Array
(
[0] => A
[1] => B
[2] => C
[3] =>
)
column nr.: 4
如果行在最后一个之后结束,为什么函数包含空白列; 我希望只计算 3 列而不是 4。
谢谢
我使用以下方法省略了最后一个分号: 好的, CSV 现在每行有 25 列,并使用以下方法创建:
public function createRowForFile(Array $content, $fileName, $sep, $carriageReturnLineFeed) {
$contentRow = '';
$noSep = '';
$lastColumn = count($content);
$columnNr = 1;
foreach ($content as $contentName => $contentValue) {
// the semicolon after the last column is omited, because semicolonsdefine breaks between columns,
// (
// ex: A;B;C; columns nr = 4 WRONG
// A;B;C columns nr = 3 OK
// )
if ($lastColumn === $columnNr) {
$sep = $noSep;
}
$columnNr++;
$contentRow.= $contentValue . $sep;
}
$contentRow.= $carriageReturnLineFeed;
$this->writeFileInDir($fileName, $contentRow);
}
有什么建议吗?
【问题讨论】:
-
发生这种情况是因为行尾有一个 extra
;。行尾实际上不是问题。你的线路应该是A;B;C\r\n。 -
否,PHP 在 IBMI 上运行 CSV 是在 Windows 上创建的,文件结尾不同,但我该如何解决这个问题?
-
@ Rocket Hazmat 这是现在的输出: Array ( [0] => A [1] => B [2] => C\r\n ) column nr.: 3 I don'不想要我的列数据中的 \r\n
-
如果您使用 PHP创建 CSV 文件,那么我建议使用
fputcsv()。