Txt फ़ाइल की प्रत्येक पंक्ति को नए एरे तत्व में पढ़ें


118

मैं एक टेक्स्ट फाइल की हर लाइन को एक अरै में पढ़ने की कोशिश कर रहा हूं और प्रत्येक लाइन एक नए तत्व में है।
मेरा कोड अब तक।

<?php
$file = fopen("members.txt", "r");
$i = 0;
while (!feof($file)) {

$line_of_text = fgets($file);
$members = explode('\n', $line_of_text);
fclose($file);

?>

1
क्या कुछ भी आपके कोड के साथ सरणी में संग्रहीत है? आपको क्या विशिष्ट समस्या है?
क्रिस बोर्नहॉफ्ट

1
चेतावनी: फोपेन से FALSE चेतावनी जारी करेगा और यहां अनंत लूप का परिणाम देगा। php.net/manual/en/function.feof.php
Gjermund Dahl

थ्रेड की तारीख के बावजूद '\n\'विस्फोट नहीं किया जा सकता है, जबकि इसे "\n"बच निकलने के क्रम के रूप में पार्स किया जाना चाहिए ।
कोडकंडिस

जवाबों:


397

आप किसी विशेष प्रसंस्करण की जरूरत नहीं है, यह आप के लिए क्या देख रहे हैं क्या करना चाहिए

$lines = file($filename, FILE_IGNORE_NEW_LINES);

file()लगता है की तुलना में काफी धीमी file_get_contents+ explodeसरणी करने के लिए
रॉन

@ मैं सहमत हूँ। फिर, आपको हर अनुरोध पर इस तरह से फ़ाइल नहीं पढ़नी चाहिए। यह सिर्फ मूर्खतापूर्ण है, भले ही समाधान इष्टतम हो। फ़ाइल की सामग्री या तो मेमोरी कैश पर संग्रहीत की जानी चाहिए, या एक डेटाबेस में भी। यहां तक ​​कि PHP पार्स की गई फ़ाइलों की सामग्री को संग्रहीत करता है। मेरा मतलब है, हम
यानिक रोचोन

35

सबसे तेज़ तरीका जो मैंने पाया है वह है:

// Open the file
$fp = @fopen($filename, 'r'); 

// Add each line to an array
if ($fp) {
   $array = explode("\n", fread($fp, filesize($filename)));
}

जहाँ $ फ़ाइल नाम आपकी फ़ाइल का पथ और नाम होने जा रहा है, उदा। ../filename.txt।

निर्भर करता है कि आपने अपनी पाठ फ़ाइल कैसे सेट की है, आपको \ n बिट के साथ खेलना होगा।


1
मैं "\ n" के बजाय "PHP_EOL" का उपयोग करूँगा, ऐसा लगता है, $ array = explode (PHP_EOL, fread ($ fp, filesize ($ filename)));
फेबियन हरमसेन

धन्यवाद आकर्षित, कई कार्यों की कोशिश करने के बाद, आपका एकमात्र ऐसा काम है। मेरा खोज शब्द आपके \ n के बजाय <br> जा रहा है। मेरी फ़ाइल को केवल एक बड़े मान सरणी के रूप में पढ़ा जा रहा था, पूरे पाठ में केवल एक सरणी आइटम $ myarr [0] था, इसलिए फेरबदल ने एक आइटम पर काम नहीं किया। आशा है कि यह किसी की मदद करता है। एक बार फिर धन्यवाद।
washere

27

बस इस का उपयोग करें:

$array = explode("\n", file_get_contents('file.txt'));

26
$yourArray = file("pathToFile.txt", FILE_IGNORE_NEW_LINES);

FILE_IGNORE_NEW_LINESप्रत्येक ऐरे एलिमेंट के अंत में न्यूलाइन जोड़ने से बचें।
आप FILE_SKIP_EMPTY_LINESखाली लाइनों को स्किप करने के लिए भी उपयोग कर सकते हैं

यहाँ संदर्भ


23
<?php
$file = fopen("members.txt", "r");
$members = array();

while (!feof($file)) {
   $members[] = fgets($file);
}

fclose($file);

var_dump($members);
?>

1
ठीक है, मैं इसे पूरी तरह से धन्यवाद काम कर रहा हूँ। हालाँकि मुझे एक सरणी तत्व के लिए एक वाइएबल = सेट करने की आवश्यकता है। $ var = $ ary [1]; काम नहीं करता। ary [1] = "परीक्षण"। अगर वह मदद करता है।
दान

1
अपने आप को एक काउंटर चलाएं और सरणी में सूचकांक सेट करें
प्रसाद

7
$lines = array();
while (($line = fgets($file)) !== false)
    array_push($lines, $line);

जाहिर है, आपको पहले एक फाइल हैंडल बनाना होगा और उसे स्टोर करना होगा $file


7

यह इतना आसान है:

$lines = explode("\n", file_get_contents('foo.txt'));

file_get_contents() - स्ट्रिंग के रूप में पूरी फाइल मिलती है।

explode("\n")- स्ट्रिंग को सीमांकक के साथ विभाजित करेगा "\n"- एक नई रेखा के लिए एएससीआईआई-एलएफ भागने क्या है।

लेकिन ध्यान दें - जांचें कि फ़ाइल में UNIX -Line अंत है।

अगर "\n"आप ठीक से काम नहीं करेंगे तो आपके पास 2 न्यूलाइन की दूसरी कोडिंग होगी और आप कोशिश कर सकते हैं "\r\n", "\r"या"\025"



1

आप सही रास्ते पर थे, लेकिन आपके द्वारा पोस्ट किए गए कोड के साथ कुछ समस्याएं थीं। सबसे पहले, जबकि लूप के लिए कोई समापन ब्रैकेट नहीं था। दूसरे, $ line_of_text को प्रत्येक लूप पुनरावृत्ति के साथ अधिलेखित किया जाएगा, जो लूप में = से a =। को बदलकर तय किया गया है। तीसरा, आप शाब्दिक वर्ण '\ n' का विस्फोट कर रहे हैं और वास्तविक रूप रेखा नहीं; PHP में, एकल उद्धरण शाब्दिक वर्णों को निरूपित करेंगे, लेकिन दोहरे उद्धरण वास्तव में भागे हुए पात्रों और चर की व्याख्या करेंगे।

    <?php
        $file = fopen("members.txt", "r");
        $i = 0;
        while (!feof($file)) {
            $line_of_text .= fgets($file);
        }
        $members = explode("\n", $line_of_text);
        fclose($file);
        print_r($members);
    ?>

1
    $file = file("links.txt");
print_r($file);

यह txt फ़ाइल को सरणी के रूप में स्वीकार करेगा। इसलिए लिंक के लिए कुछ भी लिखें। फ़ाइल (एक तत्व के लिए एक लाइन का उपयोग करें) के बाद, इस पृष्ठ को चलाएं :) आपकी सरणी $ फ़ाइल होगी


0

यह यहां काफी अच्छी तरह से कवर किया गया है, लेकिन अगर आपको वास्तव में यहां सूचीबद्ध किसी भी चीज से बेहतर प्रदर्शन की आवश्यकता है, तो आप इस दृष्टिकोण का उपयोग कर सकते हैं strtok

$Names_Keys = [];
$Name = strtok(file_get_contents($file), "\n");
while ($Name !== false) {
    $Names_Keys[$Name] = 0;
    $Name = strtok("\n");
}

ध्यान दें, यह मान लेता है कि आपकी फ़ाइल \nन्यूलाइन वर्ण के रूप में सहेजी गई है (आप आवश्यकतानुसार अपडेट कर सकते हैं), और यह शब्दों / नामों / रेखाओं को मानों के बजाय सरणी कुंजी के रूप में संग्रहीत करता है, ताकि आप इसे एक के रूप में उपयोग कर सकें लुकअप टेबल, isset(के बजाय, बहुत तेजी से) के उपयोग की अनुमति देता है in_array

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.