Php 基于固定字符忽略csv文件上的特定行

Php 基于固定字符忽略csv文件上的特定行,php,sql,sql-server,csv,bulkinsert,Php,Sql,Sql Server,Csv,Bulkinsert,我有非常大的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 DOE

我有非常大的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",
BULK
INSERT nibl
FROM 'd:\2.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
FIRSTROW=2
)
GO
无效事务(不带<和>)的行的列数较少,这会导致批量插入失败


我不想使用fgetcsv循环,因为csv大小甚至大于100 mb

没有循环,只需使用explode、array\u filter和infrade

<?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);
?>


为什么要手动拆分/解析csv?使用
fgetcsv()
然后使用
if(substr($row[2],0,1)='同意Marc B。当我需要解析巨大的CSV文件(200-400mb)时,我使用和
->seek()-看看这个。我正在尝试在不使用fgetcsv的情况下进行大容量插入。这将真正降低整个过程的速度。请不要循环\n然后您不能使用此方法导入文件。csv的格式必须对每一行保持不变。如果您不想从php循环/插入,至少在php中循环/过滤,并生成一个可以直接导入的.csv装得很重。
<?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);
?>