Как я могу обрезать эти 7 столбцов до 5 столбцов, запустив несколько сценариев.
Я помню, вы можете сделать это, используя regex / php, но buggered, если я могу вспомнить, как мы это сделали.
Пример кода (из базы данных GEO IP db (115 000 строк)
"3231296768","3231297023","ripencc","702518400","EU","EU","European Union" "3231297024","3231297279","ripencc","441763200","EU","EU","European Union" "3231297280","3231297535","ripencc","702518400","EU","EU","European Union" "3231297536","3231297791","ripencc","702518400","EU","EU","European Union" "3231297792","3231298047","ripencc","702518400","EU","EU","European Union" "3231298048","3231298303","ripencc","702518400","EU","EU","European Union" "3231298304","3231298559","ripencc","702518400","EU","EU","European Union"
Мне нужно удалить столбцы 3 и 4 из каждой строки.
Любая помощь оценивается.
Хотя ответ jimw – лучший ответ в целом, если вы хотите чистое PHP-решение, я бы предложил следующее:
$input = 'input.txt'; $output = 'output.txt'; if (false !== ($ih = fopen($input, 'r'))) { $oh = fopen($output, 'w'); while (false !== ($data = fgetcsv($ih))) { // this is where you build your new row $outputData = array($data[0], $data[1], $data[4], $data[5], $data[6]); fputcsv($oh, $outputData); } fclose($ih); fclose($oh); }
Из «сценария родов» и «regex / PHP» я делаю вывод, что вы просто хотите сделать это, и не волнует, какой язык используется. Если вы на * nix:
cut -d, -f1,2,5,6,7 file.csv
«cut» – стандартная утилита командной строки unix, найденная во всем: от OS X до AIX. Аргументы, которые я использовал:
-d, # this sets the 'delimiter' to a comma, for CSV -f1,2,5,6,7 # this selects which fields to print
Таким образом, он берет файл, в котором каждая строка состоит из полей, разделенных запятыми, и печатает поля от одного до пяти.
Такой же эффект может быть достигнут на любом языке программирования. Я не очень хорошо знаю PHP, поэтому я не буду пытаться создавать его на PHP.
Изменить: из документов PHP адаптировано немного:
function apply_quotes($string) { return '"'.$string.'"'; } $row = 1; if (($handle = fopen("test.csv", "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $data = array_map("apply_quotes", $data); echo join(",", array($data[0], $data[1], $data[4], $data[5], $data[6]))."\n"; } fclose($handle); }