2012-02-20 8 views
0

余分な空白ヘッダーを削除。私は前に、ヘッダー空白でいくつかの問題に直面したトリムcsvファイル内のデータと、私は今、私のデータベースにCSVデータをインポートするために、このコードを使用してい

if (($handle = fopen($source_file, "r")) !== FALSE) { 
    $columns = fgetcsv($handle, $max_line_length, ","); 
    $esc_columns = array(); 
    foreach ($columns as &$column) { 
     $column1 = str_replace(".","",$column); 
     $column = preg_replace("/\s*,\s*/",",",$column1); 
     $esc_columns[] = escapeSqlName($column); 
    } 

    $esc_columns[] = escapeSqlName('custgroup'); 
    $esc_columns[] = escapeSqlName('user_id'); 
    $esc_columns[] = escapeSqlName('mylabel'); 

    $x = preg_replace("/\s*,\s*/", ",", implode(',',$esc_columns)); 
    $xx = str_replace(' ', '', $x); 

    $sqlsmttempl = 'INSERT DELAYED INTO %s (%s) VALUES (%s)'; 
    $sqlsmt = sprintf($sqlsmttempl, 
     escapeSqlName($target_table), 
     $xx, 
     implode(',',array_fill(0, count($esc_columns), '?')) 
); 


    $db = new PDO("mysql:host=localhost;dbname=Data;","root",""); 

    $insert = $db->prepare($sqlsmt); 

    while (($data = fgetcsv($handle, $max_line_length, ",")) !== FALSE) { 
    while(count($data) < count($columns)) { 
     $data[] = NULL; 
    } 

    $data[] = $_POST['custgroup']; 
    $data[] = $_POST['user_id']; 
    $data[] = $_POST['mylabel']; 

    $insert->execute($data); 
} 

(フランシス・アビラのおかげで)ので、追加しました

 $x = preg_replace("/\s*,\s*/", ",", implode(',',$esc_columns)); 
    $xx = str_replace(' ', '', $x); 

ここで空白は無視されます。

しかし、データの空白はどうですか?(ちょうどコンマの前後にあります)私はtrim($data)を試しましたが、間違っていると私は知っています。

とヘッダのような他の余分なカンマ、含まれているとき、私は、アップロードを処理するための方法を見当もつかない:?

Name,Address,Phone,,,,,だけでなくName,Address,Phoneの(間違った)(訂正)

何かアドバイスを事前に感謝。

答えて

3

問題がRTRIM(文字列$ strの[、文字列$ CHARLIST])を使用することによって解決することができます:あなたが使用できるPHPでテキストtrimingについて

$x = preg_replace("/\s*,\s*/", ",", implode(',',$esc_columns)); 
$xx = str_replace(' ', '', $x); 
$xx = rtrim($xx,','); 

を:トリム、LTRIM(左トリム)(上のトリム両側)、rtrim(右トリム)。

$x = preg_replace("/\s*,\s*/", ",", implode(',',$esc_columns)); 
$xx = str_replace(' ', '', $x); 

$xx = trim($xx); //trim spaces from both sides 
$xx = trim($xx,','); //trim comas from both sides 

注:あなたが好きなあなたは多くのコマンドを追加しCANDの文字列が

$xx = trim($xx); //exclude spaces both sides so for " text " => "text" 
$xx = ltrim($xx); //exclude spaces left side so for " text " => "text " 
$xx = rtrim($xx); //exclude spaces right side so for " text " => " text" 

$xx = rtrim($xx,','); //adding second parameter ',' will not trim spaces, will trim coma 

を整えする - 入力文字列$ CHARLIST - すべてのパラメータ(文字列$ strの[、文字列$ CHARLIST])$ strを受け入れます:

$xx = trim($xx,','); //this is faster (only one function call) 

//equivalent with 
$xx = ltrim($xx,','); 
$xx = rtrim($xx,','); 
+0

この素晴らしい答えに感謝します。申し訳ありませんがもう1つ質問できますか?どうやって私のCSVデータを整理してRTMできますか? –

+0

もう一度ありがとうございます。しかし、$ xxは私のヘッダーです。私がトリミングする必要があるのは、次のデータです。 –

関連する問題