У меня очень большие файлы csv, содержащие журнал транзакций банка. Действительный идентификатор транзакции заключен в <>. Формат как нижеигнорировать определенную строку в файле csv на основе фиксированного символа
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",
Я хочу использовать CSV в Mssql объеме вставки, как показано ниже
BULK
INSERT nibl
FROM 'd:\2.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
FIRSTROW=2
)
GO
Invalid сделки (линия без < и>) имеют меньше нет столбцов, которые приводят к выходу из строя основной массы вставки
Я не хочу использовать циклы, используя fgetcsv beacuse csv, размер еще больше 100 мб
Почему вы вручную раскалываете/разбираете csv? используйте 'fgetcsv()', а затем 'if (substr ($ row [2], 0, 1) == '<')) {continue; } '. –
Согласитесь с Marc B. Я использую [** splfileobject **] (http://www.php.net/manual/en/class.splfileobject.php) и '-> seek()'/'-> fgetcsv () 'когда мне нужно разобрать огромные CSV-файлы (200-400mb) - взгляните на это. – davidkonrad
Я пытаюсь сделать объемную вставку без использования fgetcsv. это действительно замедлит весь процесс. no loop please \ – sumit