2015-07-24 2 views
0
1. 
00:00:00:00 
00:00:00:01 
Hi 

2. 
00:00:37:15 
00:00:38:16 
Hiiii 
How Are you? 

3. 
00:00:40:01 
00:00:41:19 
Fine. 

Я попытался прочитать выше файл, но я не получил требуемого результата. мне нужно привести:Как читать файл с расширением .asc в php, и он должен создать массив с .mark, содержащий числовое значение?

array(
    [0] => Array 
     (
     [asc_id] => 1. 
     [start_time] => 00:00:00:00 
     [end_time] => 00:00:00:01 
     [action_1] => Hi 
     [action_2] => 
     ) 

    [1] => Array 
     (
     [asc_id] => 2. 
     [start_time] => 00:00:37:15 
     [end_time] => 00:00:38:16 
     [action_1] => Hiiii 
     [action_2] => How Are you? 
     ) 

    [2] => Array 
     (
     [asc_id] => 3. 
     [start_time] => 00:00:53:02 
     [end_time] => 00:00:53:20 
     [action_1] => Fine. 
     [action_2] => 
     ) 
) 
+0

И что вы получаете прямо сейчас –

+0

Какой у вас текущий код? – MatsLindh

+0

- это ваш файл (тот, у кого есть данные), сохраненный с расширением .asc? –

ответ

0

Вот простой старт, который предполагает ввод всегда будет отформатирована так же, как описано выше. Есть много улучшений, которые вы могли бы сделать для проверки ошибок и лучшей гибкости в отношении формата ввода.

$myarray = array(); 
$file = file('file.asc'); 

while ($line = array_shift($file)) 
{ 
     if (preg_match('/\d+\.$/', $line)) 
     { 
       $myarray[] = array(
         'asc_id' => trim($line), 
         'start_time' => trim(array_shift($file)), 
         'end_time' => trim(array_shift($file)), 
         'action_1' => trim(array_shift($file)), 
         'action_2' => trim(array_shift($file)), 
       ); 
     } 
} 

print_r($myarray); 
0

Это требование к обработке файлов. Какие:

  • читать «группы» записей, 5 в этом случае
  • превратить их в ассоциативный массив
  • добавить их в массив PHP.

Подход:

  • Процесс записи в группах заданного размера
  • Обеспечить «место» для обработки начало «группы»
  • обеспечить место для обработки конца группа

Поскольку это «вложенные» группы, я использую технику «читать вперед».

Complete code at pastebin.com

'многословно? возможно :)

Код:

определения данных:

/** 
* Data definition 
*/ 
define('SOURCE_FILE', __DIR__ . '/Q31609517-data.asc'); 
define('MAX_LINE_LEN', 128); 

// data group details 
define ('DATA_GROUP_SIZE', 5); 

// allow easy changing of data names and changing the input order 
$itemNames = array('asc_id', 'start_time', 'end_time', 'action_1', 'action_2'); 

обрабатывать данные:

/** 
* Process the file 
*/ 
$sourceFile = fopen(SOURCE_FILE, 'r'); 

$currentLine = fgets($sourceFile, MAX_LINE_LEN); // always use 'read ahead'; 

// process the file 
while (!feof($sourceFile) && $currentLine !== false) { 

    // start group processing 
    $currentGroupLine = 0; 
    $currentGroup = array(); 

    while ($currentGroupLine < DATA_GROUP_SIZE) { 

     $currentGroup[$itemNames[$currentGroupLine]] = trim($currentLine); 
     $currentGroupLine++; 

     $currentLine = fgets($sourceFile, MAX_LINE_LEN); // always use 'read ahead'; 
    } 

    // process complete group 
    $outData[] = $currentGroup; 
} 

fclose($sourceFile); 

тестовых данных (5 линий на группу):

1. 
00:00:00:00 
00:00:00:01 
Hi 

2. 
00:00:37:15 
00:00:38:16 
Hiiii 
How Are you? 
3. 
00:00:40:01 
00:00:41:19 
Fine. 

Выход:

Array 
(
    [0] => Array 
     (
      [asc_id] => 1. 
      [start_time] => 00:00:00:00 
      [end_time] => 00:00:00:01 
      [action_1] => Hi 
      [action_2] => 
     ) 

    [1] => Array 
     (
      [asc_id] => 2. 
      [start_time] => 00:00:37:15 
      [end_time] => 00:00:38:16 
      [action_1] => Hiiii 
      [action_2] => How Are you? 
     ) 

    [2] => Array 
     (
      [asc_id] => 3. 
      [start_time] => 00:00:40:01 
      [end_time] => 00:00:41:19 
      [action_1] => Fine. 
      [action_2] => 
     ) 
) 
+0

Я обрезаю вход, когда храню его, так как в нем есть 'whitespace', который будет путать вещи. –

 Смежные вопросы

  • Нет связанных вопросов^_^