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.

第一行和第二行表示同一个字符,但第一行是简体字,第二行是繁体字。我需要将它们存储到相应ch_simplifiedch_trad列中。

第三行,以 [m1] 开头,是一个转写(拼音),第四行(以 [m2] 开头)是一个字符的翻译。还有字符的第二个翻译,你可以注意到它有不同的转录。

我们需要将两个转录(有时同一个字符有两个以上的转录)存储在一个单独的列 ( 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);

并停留在我必须在第一个字符和第二个字符之间分离数据的步骤(戚谊和三州府)。

任何帮助将不胜感激!

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) 简体字和繁体字的识别。这些问题可能通过计算字符字段标识来解决——第一个是简化的,第二个是传统的,第一个是一段时间表示一个新字段——但这是你的工作。

我也没有评估任何与非 ascii 字符集相关的问题。我假设你在这些东西之上。

我借此机会将内容与表示性标记(如 [b] 标签)分开将这些语义与适当的数据分开是一种很好的做法。

于 2009-10-12T13:54:34.193 回答