如何在php中读取具有扩展名.asc的文件,它应该创建由数字值包含的.mark数组


How to read file having extension .asc in php and it should create array with .mark contained by numeric value?

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.

我试着阅读上面的文件,但我没有得到所需的结果。我需要result in:

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] => 
        )
)

这是一个简单的开始,假设您的输入总是与上面相同的格式。对于错误检查和更好的输入格式灵活性,您可以对此进行许多改进。

$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);

这是'文件处理'要求。这是:

  • 读取一组记录,在本例中为5
  • 将它们转换为关联数组
  • 将它们附加到PHP数组中。

方法:

  • 按指定大小的组处理记录
  • 为处理"组"的开始提供一个"位置"
  • 提供处理组末尾的位置

由于这些是"嵌套"组,我使用了"预读"技术。

完整的代码在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] => 
        )
)