根据固定字符忽略 CSV 文件上的特定行



我有非常大的csv文件,其中包含银行的交易日志。有效的交易 ID 用<>括起来。格式如下

012,10/1/2013,<13273288163624>JOHN doe .,<01-10-2013>20130930,13273288163624,10/1/2013,"10,580.00",
012,10/1/2013,SI TRANSFER,10/1/2013,"11,330,114.07",
012,10/1/2013,<555395056216>JOHN DOE1,<01-10-2013>,555395056216,10/1/2013,"46,852.00",
012,10/1/2013,<13273708949197>JOHN DOE3 -,<01-10-2013>20130930,13273708949197,10/1/2013,"57,687.00",

我们的优点是需要忽略不包含"<"和">"的行。

有没有办法忽略这些 csv 行以获得如下所示的 csv 文件内容?

012,10/1/2013,<13273288163624>JOHN doe .,<01-10-2013>20130930,13273288163624,10/1/2013,"10,580.00",
012,10/1/2013,<555395056216>JOHN DOE1,<01-10-2013>,555395056216,10/1/2013,"46,852.00",
012,10/1/2013,<13273708949197>JOHN DOE3 -,<01-10-2013>20130930,13273708949197,10/1/2013,"57,687.00",

我想在mssql批量插入中使用csv,如下所示

BULK
INSERT nibl
FROM 'd:2.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = 'n',
FIRSTROW=2
)
GO

无效事务(没有<和>的行)的列数较少,这会导致批量插入失败

我不想使用 FGETCSV 使用循环,因为 CSV 大小甚至大于 100 MB

没有循环只是使用爆炸,array_filter和内爆

<?php
$csv=file_get_contents("1.csv");
$arr=explode("n",$str);
function filter($str){
    return strpos($str,"<");
}
$new_arr=array_filter($arr,"filter");
$str=implode("n",$new_arr);
file_put_contents("1.csv",$str);
?>

最新更新