1

文字列を分割して両方の部分を返す非常に効率的な方法を探しています。

分割する必要がある文字列の長さは 893,004 文字で、文字列の各行の長さは 163 文字で、100 行後に分割したいと考えています。

正規表現を使用してファイルから取得される文字列ファイルの簡単な表現、

'/[a-z0-9]{40}/i' '/[a-z0-9]{40}/i' '/[a-z0-9]{40}/i' '/[a-z0-9]{40}/i' // 163 characters
'/[a-z0-9]{40}/i' '/[a-z0-9]{40}/i' '/[a-z0-9]{40}/i' '/[a-z0-9]{40}/i' // 163 characters
'/[a-z0-9]{40}/i' '/[a-z0-9]{40}/i' '/[a-z0-9]{40}/i' '/[a-z0-9]{40}/i' // 163 characters

などなど(笑)

100行後に文字列を分割しようとすると、

// FILE CONTENTS
$content = file_get_contents($file);
// GET PARSER GXDE
$split = preg_split('/^[a-z0-9\s]{16300}$/i', $content, 1); // REGEX DOESNT WORK
var_dump($split[0]);

ファイル内の 100 行の後に文字列を分割しようとしていますが、これはどのように簡単に行うことができますか?

4

2 に答える 2

3

file()ファイル行を配列として取得するか、ファイルを行fgets()ごとに抽出するために使用します。これにより、単純なカウンターを使用して、適切な行数でファイルを分割できます。

于 2012-05-22T20:50:31.513 に答える
0

必要がなければ、正規表現を使用するべきではありません。正規表現は比較的高価な操作であり、正規表現を使用して固定長の文字列を取得すると、処理の無駄になります。

「100行後に文字列を分割する」という意味が明確ではありません。ドキュメントからのこの適応例は、ファイルを 100 行のチャンクで書き出します (すべての行が改行を含めて 163 文字の場合)。

$handle = @fopen("/inputfile.txt", "r");
if ($handle) {
    $i = 0;
    while (($buffer = fgets($handle, 163000)) !== false) {
        $i++;
        file_put_contents("chunk$i.txt", $buffer);
    }
    fclose($handle);
}
于 2012-05-22T21:06:09.363 に答える