2012-01-25 4 views
0

Blackberry Messengerから生成されたCSVファイルから1つのファイルを解析して作成したいと考えています。PHPでBlackberry Messenger CSVを解析するには?

例:

BlackBerry Messenger,6.0.0.129CRLF 
201112071323251405361,"2732E6DB ","555ABCDA",TextData TextData TextData TextDataCRLF 
201112071323253558103,"555ABCDA","2732E6DB ",TextData TextData TextDataCRLF 
201112071323253746576,"2732E6DB ","555ABCDA",TextData TextData TextData 
LF 
TextData TextDataLF 
TextData TextData TextData TextData TextData TextData TextData TextData TextDataLF 
TextData TextData TextData TextDataCRLF 
201112071323253809444,"2732E6DB ","555ABCDA", TextData TextData TextData TextDataCRLF 
201112091323441592335,"2732E6DB ","555ABCDA", TextData TextDataLF 
    LF 
<3<3=.>:O :s=.>=) <3<3=.>:O :s=.>=)LF 
    LF 
- Copy all smiley aboveLF 
- pasteLF 
- erase 4 dotLF 
- send me backLF 
- see the magic (smiley change)LF 
    CRLF 

CSVファイル形式

Date,SendersPIN,ReceiversPIN,MessageText 

日は、YYYYMMDD +エポック形式になって、次のしたことを見ることができるように。 すべてのレコードはCRLF(改行改行)文字で終わり、MessageTextの新しい行はそれぞれLF(改行)文字で区切られます。

この問題は、MessageTextがどのコンテナにも含まれておらず、新しい行がたくさんあることがわかります。だから私はExcelで直接インポートすることはできません。

ファイル操作に関する限り、私はPHPで初心者だと考えています。可能であれば、コードを記述してみてください。

ありがとうございます。

+0

これは難しい問題です。 'fgetcsv'はカンマも使用しているため、デリミタとして読み込まれるため動作しません。 'fgets'を使って行単位で読み込んだり、カンマ(' explode')で分割してもうまくいきません。メッセージが次の行に流出するからです。 – xbonez

答えて

0

@xbonez氏によると、これは非常に難しいことです。私はあなたが一度に各行を読む必要があると思います。最初の「列」の日付は、新しいメッセージがどこで始まるかを決める秘訣かもしれません。ライン場合はtrueを返します(行が新しいBBMメッセージの開始である場合

<?php 
$handle = open($filename,"r"); 
$input_line = fgets($handle); // Reads the first line of the file, which we will discard 
$input_line = fgets($handle); //read a line of text from the file 
$msg_data = ''; 
$mesg = ''; 
$first_run = TRUE; 
while (!$input_line) // Check whether we've reached the end of the file, 
        // fgets returns FALSE if we have 
{ 
    if (new_bbm_message($input_line)) 
    { 

    if(!$first_run) 
    //You now have a complete message, do something with it. I'm just going to print it. 
     echo $msg_data . addslashes($mesg); 
    else $first_run = FALSE; 

    // Get the new messages data 
    $msg_data = substr($input_line,0,46); // Get string with Date,SendersPIN,RecieversPIN up to the ',' after receivers pin. 
    $mesg = substr($input_line,47); 
    } 
    else 
    { 
    // This is another line of text of the message. 
    $mesg .= $input_line; 
    } 

    // Read in the next line of text. 
    $input_line = fgets($handle);  
} 

?> 

new_bbm_message機能は、あなたが決定するために書くことを得るものです:これはPHPコードではありませんが、私が使用する方法は、新しいメッセージであるか、それがメッセージ1の続きであればFALSE)。 PHPの行の最初の20文字を有効な日付に変更するか、または21桁がカンマかどうかをテストすることができます。

substrコールの番号のいくつかを再度確認する必要があります。それらはオフになっている可能性があります。

Good Luck。

+0

それはよさそうだ。しかし、その行が新しいメッセージであるかどうかを確認できる関数を提案できますか?更新:すべてのメッセージはCRLF(改行改行)文字で終了し、MessageTextの新しい行はそれぞれLF(改行)文字で区切られます。 – dkcreatto

+0

あなたは解決策を見つけてうれしいです。 "PHPの行の最初の20文字を有効な日付に変更するか、または21桁目がコンマかどうかをテストすることができます。私の提案された機能でした。私はどのアプローチを取るかわからなかったので、関数全体を書くつもりはありませんでした。 –

関連する問題