簡體   English   中英

從php的CSV文件中刪除空白行

[英]Remove Blank ROWS from CSV files in php

是否可以從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,,
$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) {

對於空行:

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

基本上是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--;
    }
}

* 總的來說,那是真的值得的。 不要浪費時間進行微優化。

使用記事本++打開.csv文件。 然后搜索^\\*s轉到查找和替換,然后單擊全部替換按鈕。 這應該可以解決您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM