0

この質問を重複して申し訳ありませんが、ここで詳細を説明しようとしました。特定のファイルからデータを解析し、データベース (MySQL) に保存する必要があります。ファイル内のデータは次のように表示されます。

戚谊 
戚誼 
    [m1][b]qīyì[/b][/m] 
    [m2]translation 1[/m] 
    [m1][b]qīyi[b][/m] 
    [m2]translation 2[/m] 
三州府 
    [m1][b]sānzhōufǔ[/b][/m] 
    [m2]translation of other character[/m]
etc.

1 行目と 2 行目は同じ文字を表していますが、1 行目は簡体字、2 行目は繁体字です。ch_simplifiedそれに応じてそれらをch_trad列に保存する必要があります。

[m1] で始まる 3 行目は転記 (ピンイン)、4 行目 ([m2] で始まる) は文字の翻訳です。文字の 2 番目の翻訳もありますが、表記が異なっていることがわかります。

両方の文字起こし (同じ文字に対して 2 つ以上の文字起こしがある場合もあります) を別の列 ( transcription) に格納し、すべての翻訳部分を列 に格納する必要がありますtranslation

また、mysql db のテーブルは次のようになります。

ID  |  ch_simplified  |  ch_trad    | transcription           |   translation               | 
--------------------------------------------------------------------------------------------- 
1.        戚谊             戚誼        [m1][b]qīyì[/b][/m];     [m1][b]qīyì[/b][/m] 
                                      [m1][b]qīyi[b][/m]       [m2]translation 1[/m] 
                                                               [m1][b]qīyi[b][/m] 
                                                               [m2]translation 2[/m] 
---------------------------------------------------------------------------------------------
2.        三州府           三州府      [m1][b]sānzhōufǔ[/b][/m]  [m1][b]sānzhōufǔ[/b][/m] 
                                                               [m2]translation of other character[/m] 

問題は、php を使用してこのデータを解析する方法がわからないことです。から始めてみました

$content = file_get_contents('myfile.txt', true);

そして、最初の文字と 2 番目の文字 (知谊 と 三州府) の間でデータを分離する必要があるステップで立ち往生しました。

どんな助けでも大歓迎です!

PS このような長いテキストと紛らわしい説明で申し訳ありません。

4

2 に答える 2

0

EXPLODE()を使用して、スペースやその他の文字を壊すことができます

于 2009-10-12T12:47:47.610 に答える
0

データ フィールドは別々の行にあるため、Phil の Explode() 呼び出しは改行文字になります。したがって、基本的なデータフィールドの取得は次のようになります。

$content = file_get_contents('myfile.txt', true);

foreach(explode("\n", $content) as $line)
{
  $line = trim($line);  // remove leading white space
  // if necessary, check for empty lines here
  switch(substr($line, 0,4)) // examine first four characters
  {
    case '[m1]':
      // regular expression has some escaped characters
      preg_match('/^\[m1](.+)\[\/m]$/', $line, $matches);  
      $field = $matches[1];
      echo "pinyin: '$field'\n";
      break;

    case '[m2]':
      preg_match('/^\[m2](.+)\[\/m]$/', $line, $matches);
      $field = $matches[1];
      echo "translation: '$field'\n";
      break;

    default:
      $field = $line;  // for clarity
      echo "character: '$field'\n";
      break;
  }

}

ここでは、(a) 新しい記録の開始、または (b) 簡体字とトラッド文字の識別を識別しようとはしていません。これらの問題はおそらく、文字フィールドの識別を数えることで対処できます。最初は単純化され、2 番目はトラッド、最初はしばらく新しいフィールドを示しますが、それはあなたの仕事です。

また、ASCII 以外の文字セットに関連する問題を評価したこともありません。私はあなたがそのものの上にいると思います。

この機会に、コンテンツ表示マークアップ ([b] タグなど) から分離しました。これらのセマンティクスを適切なデータから分離しておくことは、良い習慣です。

于 2009-10-12T13:54:34.193 に答える