首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PHP处理大文件

用PHP处理大文件
EN

Stack Overflow用户
提问于 2013-10-22 18:34:44
回答 3查看 1.2K关注 0票数 0

我有一个大小约为10 GB或更大的文件。该文件每行只包含从1到10的数字,不包含其他任何内容。

你们谁能帮我解答这个问题?

EN

回答 3

Stack Overflow用户

发布于 2013-10-22 19:55:19

我假设这是某种家庭作业,其目标是排序超过RAM中可容纳的数据?

由于您只有数字1-10,因此这并不是那么复杂的任务。只需打开您的输入文件,并计算每个特定数字的出现次数。之后,您可以构造简单的循环并将值写入另一个文件。下面的例子很好解释。

代码语言:javascript
复制
$inFile = '/path/to/input/file';
$outFile = '/path/to/output/file';
$input = fopen($inFile, 'r');
if ($input === false) {
    throw new Exception('Unable to open: ' . $inFile);
}
//$map will be array with size of 10, filled with 0-s
$map = array_fill(1, 10, 0);
//Read file line by line and count how many of each specific number you have
while (!feof($input)) {
    $int = (int) fgets($input);
    $map[$int]++;
}
fclose($input);
$output = fopen($outFile, 'w');
if ($output === false) {
    throw new Exception('Unable to open: ' . $outFile);
}
/*
 * Reverse array if you need to change direction between
 * ascending and descending order
 */
//$map = array_reverse($map);
//Write values into your output file
foreach ($map AS $number => $count) {
    $string = ((string) $number) . PHP_EOL;
    for ($i = 0; $i < $count; $i++) {
        fwrite($output, $string);
    }
}
fclose($output);

考虑到你正在处理大文件的事实,你也应该检查你的PHP环境的脚本执行时间限制,下面的例子对于10GB+大小的文件将花费很长的时间,但是由于我在你的问题中没有看到任何关于执行时间和性能的限制,我假设它是OK的。

票数 1
EN

Stack Overflow用户

发布于 2013-10-22 18:40:29

我以前也遇到过类似的问题。试图操作如此大的文件最终会消耗大量的资源,并且无法处理。我最终得到的最简单的解决方案是尝试使用名为LOAD DATA INFILE的快速数据转储函数将其导入MySQL数据库

http://dev.mysql.com/doc/refman/5.1/en/load-data.html

一旦它进入,你应该能够操作数据。

或者,您可以只逐行读取文件,同时将结果逐行输出到另一个带有排序数字的文件中。不过,我不太确定这样做会有多好。

你以前有过这样的尝试吗?或者你只是在寻找一种可能的方法?

票数 0
EN

Stack Overflow用户

发布于 2013-10-22 18:42:17

如果这就是您不需要PHP的全部(如果您手头有Linux maschine ):

代码语言:javascript
复制
sort -n file > file_sorted-asc
sort -nr file > file_sorted-desc

编辑:好的,这是你的PHP解决方案(如果你手头有Linux maschine的话):

代码语言:javascript
复制
<?php

// Sort ascending
`sort -n file > file_sorted-asc`;

// Sort descending
`sort -nr file > file_sorted-desc`;

?>

:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19515439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档