将大型.txt文件中的值存储到数组中

时间:2016-07-18 16:11:47

标签: php arrays file parsing

我有一个很大的.txt文件(73,000行),我需要将该文件中的数据存储在一个数组中。

以下是文件外观的示例,它只是以这种方式重复,每一行都是这样的。

SELECT t.*, totalRevenue/yea
FROM (select round(days_between( MIN(PROD_DATE) , MAX(PROD_DATE))/365) as yea, 
             SUM(PRICE) as totalRevenue, totalRevenue/yea as perc
      from AAA
     ) t

我想用这样的键把它放到一个数组中:

2016-05-27 11:04:16: QParRFSum=1574.00 QParRFSumMean=6.05 QParSuspSum=83.00
2016-05-27 11:14:07: QParRFSum=1537.00 QParRFSumMean=5.91 QParSuspSum=96.00
2016-05-27 11:14:07: QParRFSum=1537.00 QParRFSumMean=5.91 QParSuspSum=96.00
2016-05-27 11:24:07: QParRFSum=1405.00 QParRFSumMean=5.40 QParSuspSum=0.00
2016-05-27 11:24:07: QParRFSum=1405.00 QParRFSumMean=5.40 QParSuspSum=0.00
2016-05-27 11:34:06: QParRFSum=1533.00 QParRFSumMean=5.90 QParSuspSum=89.00
2016-05-27 11:34:06: QParRFSum=1533.00 QParRFSumMean=5.90 QParSuspSum=89.00

如何以最好的方式做到这一点,并考虑到绩效?

我的想法是逐行使用file()函数和foreach循环。然后以某种方式将其处理成我想要的数组结构。像这样:

Array (
[0] =>
(
    [date] => 2016-05-27
    [time] => 11:04:16
    [QParRFSum] => 1574.00
    [QParRFSumMean] => 6.05
    [QParSuspSum] => 83.00
)
[1] =>
(
    [date] => 2016-05-27
    [time] => 11:14:07
    [QParRFSum] => 1537.00
    [QParRFSumMean] => 5.91
    [QParSuspSum] => 96.00
)
[2] =>
(
    [date] => 2016-05-27
    [time] => 11:14:07
    [QParRFSum] => 1537.00
    [QParRFSumMean] => 5.91
    [QParSuspSum] => 96.00
)
)
And so on...

这是顺便说一句,还是有更好的方法可以让我获得更好的表现?

2 个答案:

答案 0 :(得分:1)

我是从记忆中写下来但是使用了类似的东西

- (void)buttonPressed:(id)sender
{
    UIViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController"];
    [self presentViewController:viewController animated:YES completion:nil];
}

答案 1 :(得分:0)

就个人而言,如果您正在处理巨大的文件,我会使用generatorsfile streams的组合。因此,您拥有自己的流,并使用生成器将其转换为数组 on demand ,这样您就不会耗尽内存。也许是这样的

function readFromFile($fileName) {
    $handle = @fopen("/tmp/inputfile.txt", "r");
    while (($line = fgets($handle, 4096)) !== false) {
        //Process Line
        yield $line;
    }
    fclose($handle);
}