2016-10-10 4 views
0

У меня есть файл с именем test.csv который имеет 85 полей?CSV: Изменить одну полевую колонку

Я должен прочитать этот файл, изменить 1 столбец & сохранить его снова.

У меня есть код ниже.

$file_name = "test.csv"; 
$infos = array(); 
if (($handle = fopen($file_name, "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 0, ",")) !== FALSE) { 
     //echo "<pre>"; 
     //print_r($data); 

     $cleanURL = cleanUrl($data[6]); 

     $infos[] = $data[0] . ',' . $data[1] . ',' . $data[2] . ',' . $data[3] . ',' . $data[4] . ',' . $data[5] . ',' . $data[6] . ',' . $data[7] . ',' . $data[8] . ',' . $data[9] . ',' . $data[10] . ',' . $data[11] . ',' . $data[12] . ',' . $data[13] . ',' . $data[14] . ',' . $data[15] . ',' . $data[16] . ',' . $cleanURL . ',' . $data[18] . ',' . $data[19] . ',' . $data[20] . ',' . $data[21] . ',' . $data[22] . ',' . $data[23] . ',' . $data[24] . ',' . $data[25] . ',' . $data[26] . ',' . $data[27] . ',' . $data[28] . ',' . $data[29] . ',' . $data[30] . ',' . $data[31] . ',' . $data[32] . ',' . $data[33] . ',' . $data[34] . ',' . $data[35] . ',' . $data[36] . ',' . $data[37] . ',' . $data[38] . ',' . $data[39] . ',' . $data[40] . ',' . $data[41] . ',' . $data[42] . ',' . $data[43] . ',' . $data[44] . ',' . $data[45] . ',' . $data[46] . ',' . $data[47] . ',' . $data[48] . ',' . $data[48] . ',' . $data[50] . ',' . $data[51] . ',' . $data[52] . ',' . $data[53] . ',' . $data[54] . ',' . $data[55] . ',' . $data[56] . ',' . $data[57] . ',' . $data[58] . ',' . $data[59] . ',' . $data[60] . ',' . $data[61] . ',' . $data[62] . ',' . $data[63] . ',' . $data[64] . ',' . $data[65] . ',' . $data[66] . ',' . $data[67] . ',' . $data[68] . ',' . $data[69] . ',' . $data[70] . ',' . $data[71] . ',' . $data[72] . ',' . $data[73] . ',' . $data[74] . ',' . $data[75] . ',' . $data[76] . ',' . $data[77] . ',' . $data[78] . ',' . $data[79] . ',' . $data[80] . ',' . $data[81] . ',' . $data[82] . ',' . $data[83] . ',' . $data[84] . ',' . $data[85]; 
     //echo $data[6].'->'.cleanUrl($data[6]); 
     //print_r($data[17]); 
    } 
    fclose($handle); 
} 

$fp = fopen('write.csv', 'w'); 

foreach ($infos as $info) { 
    fputcsv($fp, array($info), ',', ' '); 
} 

function cleanUrl($str, $replace = array(), $delimiter = '-') { 
    setlocale(LC_ALL, 'en_US.UTF8'); 
    if (!empty($replace)) { 
     $str = str_replace((array) $replace, ' ', $str); 
    } 

    $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str); 
    $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean); 
    $clean = strtolower(trim($clean, '-')); 
    $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean); 

    return $clean; 
} 

Есть ли сортировщик путь, так что я не нужно писать 85 столбцов в массиве #info? Потому что я собираюсь изменить только 1 столбец & напишите его еще раз.

Если у меня есть Дата 10/10/2016, 10:15 AM.

затем он отделяет оба в разных столбцах.

fputcsv($fp, array($info), ',', ' '); здесь может быть проблема.

+0

я мог бы сделать это с меньшим количеством кода, но basiclly я не вижу работы вокруг – nogad

+0

Неужели он всегда будет тот же столбец, что изменилось? '$ data [17] = cleanUrl ($ data [6])'? – Luke

ответ

2

меньше перекручивание, следует немного более эффективным

<?php 


$file_name = "test.csv"; 
$infos = array(); 
if (($handle = fopen($file_name, "r")) !== FALSE) { 

    $fp = fopen('write.csv', 'w'); 

    while (($data = fgetcsv($handle, 0, ",")) !== FALSE) { 

     $data[17] = cleanUrl($data[6]); 
     fputcsv($fp, array($data), ',', ' '); 

    fclose($handle); 
} 

} 

function cleanUrl($str, $replace = array(), $delimiter = '-') { 
    setlocale(LC_ALL, 'en_US.UTF8'); 
    if (!empty($replace)) { 
     $str = str_replace((array) $replace, ' ', $str); 
    } 

    $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str); 
    $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean); 
    $clean = strtolower(trim($clean, '-')); 
    $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean); 

    return $clean; 
} 
+0

Обратите внимание: что в исходном коде 'cleanUrl ($ data [6])' позже назначается вместо '$ data [17]'. '$ data [6]' повторно введен, неизменен – Luke

+0

@Luke спасибо, не прокрутил, что далеко влево – nogad

 Смежные вопросы

  • Нет связанных вопросов^_^