php
  • file
  • csv
  • writing
  • 2017-03-27 14 views 0 likes 
    0

    私は問題があります。私はいくつかのデータをデータベースから.csvテーブルに取得しようとしています。PHPの問題でcsvに書き込む

    $fn=fopen($path.$filename, "w"); 
    
    $addstring = file_get_contents($path.$filename); 
    
    $addstring = 'Azonosito;Datum;Ido;Leiras;IP-cim;allomasnév;MAC-cim;Felhasznalonev;Tranzakcioazonosito;Lekerdezes eredmenye;Vizsgalat ideje;Korrelacios azonosito;DHCID;'; 
    /*$addstring .= "\n";*/ 
    
    $sql="select * from dhcpertekeles.dhcpk"; 
    $result =mysqli_query($conn, $sql); 
    
    if ($result=mysqli_query($conn,$sql)) 
        { 
        while ($row=mysqli_fetch_row($result)) 
        { 
    
        $addstring .= "\n".$row[0].";".$row[1].";".$row[2].";".$row[3].";".$row[4].";".$row[5].";".$row[6].";".$row[7].";".$row[8].";".$row[9].";".$row[10].";".$row[11].";".$row[12].";"; 
    
    }; 
    }; 
    
        /*file_put_contents($path.$filename, $addstring);*/ 
    
        fwrite($fn, $addstring); 
        fclose($fn); 
    

    データは次の形式である:(。addstring =) 最初addstringは、列名が含まれており、何の問題

    秒を有していないデータを含む: ID($行[0 ($ row [2])、説明($ row [3])、IP($ row [4])、コンピュータ名($ row [5])、MAC ($ row [8])、クエリ結果($ row [9])、クエリ時間($ row [10])、相関

    これは基本的に毎日のDHCPサーバーのデータで、データベースにアップロードされています。今、コードが動作し、それは私がcsvに欲しいものすべてを書きますが、2つの問題があります。

    1は、説明できない理由のコードで、データを含む行の間に空の行をcsvテーブルに挿入します。 $ row [12]を削除するとこれが修正されます。私は特殊文字を削除し、空白を見えるものに変換し、空の文字列を見えるものに変換してみました。しかし、実際には何も働かなかった、私はfwriteの代わりにfile_puts_content(2番目の問題と同じ)を試した。同じことが起こり続ける。私は\ nを削除すると動作しますが、2行目以降は1列分右に配置されません。

    2何らかの理由で、最後の2文字がcsvから削除されます。 csvに挿入される文字列には、ファイルに書き込む前に上記の2文字が含まれています。 fwriteとfile_puts_contentの両方を試しました。

    .csv形式の場合、データ列は次のように分けられます。行は\ nで表示されます。

    また、libre officeとexcelの両方でファイルを読み込もうとすると、驚くほど優れていたかもしれないと思っていましたが、

    +2

    csvへの書き込み中にfputcsvを使用する方がよい。それはお勧めの方法であり、汚れた作業をしてくれます。 – marmeladze

    答えて

    1

    fputcsv()機能を試してみてください。私は次のコードをテストしなかったが、うまくいくはずだと思う。

    $file = fopen($path . $filename, 'w'); 
    
    $header = array(
        'Azonosito', 
        'Datum', 
        'Ido', 
        'Leiras', 
        'IP-cim', 
        'allomasnév', 
        'MAC-cim', 
        'Felhasznalonev', 
        'Tranzakcioazonosito', 
        'Lekerdezes eredmenye', 
        'Vizsgalat ideje', 
        'Korrelacios azonosito', 
        'DHCID' 
    ); 
    
    fputcsv($file, $header, ';'); 
    
    $sql = "select * from dhcpertekeles.dhcpk"; 
    $result = mysqli_query($conn, $sql); 
    
    if ($result = mysqli_query($conn, $sql)) { 
        while ($row = mysqli_fetch_row($result)) { 
         fputcsv($file, $row, ';'); 
        } 
    } 
    
    fclose($file); 
    
    +0

    ありがとうございます!あなたのソリューションとその人の両方が働いています。私はこれ以上の頭痛を抱えていた。さて、空の行はなくなりましたが、私はwriteコマンドが発行されるまで文字列にある2文字がまだ失われています。また、私のデータベースはutf-8であり、utf-8のファイルはbomでなく、コードはutf-8であり、ヘッダにも定義されています。 –

    0

    $addstring = file_get_contents($path.$filename)は、その変数を次の行に上書きするため、何もしません。 12あなたは、\ nののようなもので、\ rを削除しようとしたやった上で

    は、余分な行を削除するには、次の

    $row[12] = strtr($row[12], array("\n"=>'', "\r"=>''))を。

    function AsciiToInt($char){ 
    $success = ""; 
        if(strlen($char) == 1) 
         return "char(".ord($char).")"; 
        else{ 
         for($i = 0; $i < strlen($char); $i++){ 
          if($i == strlen($char) - 1) 
           $success = $success.ord($char[$i]); 
          else 
           $success = $success.ord($char[$i]).","; 
         } 
         return "char(".$success.")"; 
        } 
    } 
    

    もう一つのヒントは、それがUTF-8またはUTF戻っていたデータベースことができます:ASCII文字は、あなたがこの機能を取らフォームで$行[12]でPHPのサイトを受信して​​いるあなたもチェックすることができ

    -16あなたはテキストファイルでいくつかの文字を失っています。

    mb_detect_encoding機能でそれを見てみてください。

    +0

    ありがとうございます!私のデータベースは確かにutf-8であり、ファイルはbomのないutf-8であり、コードはヘッダーに定義されているutf-8も使用しています。あなたが最後に2文字を失っているので、これがキャラクターロスにつながる方法についてもっと教えてもらえますか?ありがとう。 –

    +0

    他のコードは、フィールド12で改行を修正しましたか?私が掲示したAsciiToInt関数でフィールド12をチェックして、それが持つ特殊文字を確認してください。また、Notepad ++のようなUTF-8エディタでCSVファイルを開いて、文字が表示されるかどうかを調べます。ファイル内に2文字がないことをどのように知っていますか?よろしいですか? \ rと\ nが文字として数えられることを心配してください。 – NetVicious

    +0

    不足している文字を見ることができます。手作業ですべてのフィールドに記入してください。数字は2桁の数字です。 12行目以降のキャラクタ、12行目の1キャラクタはまだそこにあったが、\ nキャラクタを外した後は2キャラクターは消えてしまった。また、私は文字列をファイルに書き込む前に文字列全体を表示していましたが、それらはcsvに入っていれば失われています。 csvをnp ++でチェックしました。これは私が得るものです: –

    関連する問題