Проблема с разбором данных через php и сохранением их в базе данных MySQL - PullRequest
0 голосов
/ 11 октября 2009

Извините за дублирование этого вопроса, но здесь я попытался объяснить его более подробно. Мне нужно проанализировать данные из определенного файла и сохранить его в базе данных (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_simplified и ch_trad соответственно.

Третья строка, которая начинается с [m1], представляет собой транскрипцию (пиньинь), четвертая строка (начинается с [м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);

и застрял на шаге, где я должен разделить данные между первым и вторым символами (戚 谊 и 三 州府).

Любая помощь будет принята с благодарностью!

P.S. Извините за такой длинный текст и запутанное объяснение.

Ответы [ 2 ]

0 голосов
/ 12 октября 2009

Ваши поля данных находятся на отдельных строках, поэтому вызов 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;
  }

}

Здесь я не пытался определить (а) начало новой записи или (б) идентификацию упрощенных и традиционных символов. Эти проблемы, вероятно, решаются путем подсчета идентификаторов символьных полей - первое упрощается, второе - сначала, некоторое время указывает новое поле - но это ваша работа.

Я также не оценивал никаких проблем, связанных с набором символов, отличных от ascii. Я полагаю, вы на вершине этого материала.

Я воспользовался возможностью отделить контент от презентационной разметки (например, тегов [b]). Это просто хорошая практика, чтобы отделить эту семантику от самих данных.

0 голосов
/ 12 октября 2009

Вы можете использовать EXPLODE () и ставить пробел или любой другой символ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...