पीएचपी: पाठ fil esentence इटरेटर

वोट
0

मैं कुछ ज्ञात पीएचपी पुस्तकालयों जो मुझे पार्स करने के लिए मदद कर सकते हैं के बारे में पूछना चाहते हैं *.txtवाक्य के लिए फ़ाइलें। मैं बहुत बड़ा पाठ फ़ाइलों को पार्स करने के लिए है, तो मैं एक धारा पार्सर (वाक्य से वाक्य) बनाने का फैसला किया।

मैंने सोचा था कि यह वाक्य से फ़ाइल पुनरावृत्ति करने के लिए सुंदर होगा, कुछ की तरह:

foreach (new SentenceIterator(./data/huge.txt) as $sentence)
{
    // do something...
}

मुख्य विचार यह है कि फ़ाइल पूरी तरह से स्मृति में लोड किया जाना चाहिए है।

मैं क्या कोशिश की है:

$f = fopen(./data/huge.txt, r);
$dataBytes = 64;
$buffer = '';

while (!feof($f))
{
    $data = fread($f, $dataBytes);
    $dotPosition = strpos($data, '.');

    if (false !== $dotPosition)
    {
        $sentence = $buffer . substr($data, 0, $dotPosition);
        // correct cursor position
        fseek($f, -1 * $dotPosition, SEEK_CUR);
        // clear buffer
        $buffer = '';
        continue;
    }

    $buffer .= $data;
}

लेकिन इस मामले में मैं भ्रष्ट (lopped) वाक्य मिलता है।

किसी ने मुझे कुछ मौजूदा पुस्तकालयों का सुझाव सकता है या हो सकता है कि मेरे कोड को ठीक करने?

अग्रिम में Thx।

18/02/2013 को 07:35
उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
0

असुविधा के लिए खेद है,

कुछ खुदाई के बाद मैं समाधान है जो ... Spl lib पाया है ..

इटरेटर कहा जाता है SplFileObjectजो लागू करता है Iterator, RecursiveIteratorऔर SeekableIterator। और यह लाइन द्वारा पढ़ा फ़ाइल लाइन की अनुमति देता है।

अपडेट और काम कोड है:

$file = new SplFileObject('./data/test.txt');
$file->setFlags(SplFileObject::DROP_NEW_LINE | SplFileObject::SKIP_EMPTY);
$buffer = '';

foreach ($file as $lineNumber => $line)
{
    $dotPos = strpos($line, '.');
    if (false !== $dotPos)
    {
        $sentence = $buffer . substr($line, 0, $dotPos);
        echo $sentence . "\n";
        $buffer = substr($line, $dotPos);
        continue;
    }
    $buffer .= $line;
}
18/02/2013 को 07:48
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more