是否可以从CSV文件中删除所有空白ROWS?
我正在尝试计算CSV文件中的所有行,但希望排除不包含特定列或整行的值的行。
这就是我现在用来计算行数的方法。
$import = file($target_path, FILE_SKIP_EMPTY_LINES);
$num_rows = count($import);
echo $num_rows;
样品:
Jun,Bronse,137 Raven,Princeton,TX,75407,2147088671,Nell@Gmail.Com,1990,CHEVROLET,K1500,,
,,,,,,,,,,,,
,,,,,,,,,,,,
,,,,,,,,,,,,
Nella,Brown,111 Venna St,Princeton,TX,75407,2147177671,lakb@Gmail.Com,1993,CHEVROLET,K1500,,
Jun,Bronse,137 Raven,Princeton,TX,75407,2147088671,Nell@Gmail.Com,1990,CHEVROLET,K1500,,
,,,,,,,,,,,,
Jun,Bronse,137 Raven,Princeton,TX,75407,2147088671,Nell@Gmail.Com,1990,CHEVROLET,K1500,,
答案 0 :(得分:9)
$lines = file("test.csv", FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES);
$num_rows = count($lines);
foreach ($lines as $line) {
$csv = str_getcsv($line);
if (empty($csv[SPECIFIC_COLUMN])) {
$num_rows--;
}
}
如果您不想检查特定列,只过滤掉所有列为空的行,请将其更改为:
if (count(array_filter($csv)) == 0) {
答案 1 :(得分:3)
对于空行:
$lines = file("test.csv", FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES);
$num_rows = count($lines);
foreach ($lines as $line) {
$csv = str_getcsv($line);
if (!array_filter($csv)) {
$num_rows--;
}
}
答案 2 :(得分:0)
$filename = "test.csv";
if (($fp = fopen($filename, "r")) !== FALSE) {
$rows = explode("\n", $fp);
$csv = "";
foreach($rows as $r) {
if(str_replace(array(" ", ","), "", $r) != "")
$csv .= $r."\n";
}
file_put_contents($filename, $csv);;
}
答案 3 :(得分:0)
基本上Barmar已经发布了什么,但是如果你需要处理(很多)大*文件,我建议你试试rtrim
(或ltrim
),因为通常会有一些像你这样的任务更快:
$lines = file("test.csv", FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES);
$num_rows = count($lines);
foreach ($lines as $line) {
if (!rtrim($line, ',')) {
$num_rows--;
}
}
* 从大到大,我的意思是说它非常值得。不要浪费你的时间进行微观优化。 子>
答案 4 :(得分:-1)
使用记事本++打开.csv文件。然后搜索^\*s
转到查找和替换,然后单击全部替换按钮。这应该可以解决您的问题。