2010-08-21 19 views
27

मैं एक PHP स्क्रिप्ट लिख रहा हूं जो संख्याओं को टेक्स्ट फ़ाइल में जोड़ता है। मैं हर लाइन पर एक नंबर है करना चाहते हैं, इस तरह:file_put_contents, file_append और लाइन ब्रेक

1 
5 
8 
12 

अगर मैं file_put_contents($filename, $commentnumber, FILE_APPEND) उपयोग करते हैं, परिणाम लगता है:

15812 

मैं file_put_contents($filename, $commentnumber . "\n", FILE_APPEND) की तरह एक लाइन ब्रेक जोड़ते हैं, तो रिक्त स्थान के बाद जुड़ जाते हैं अंत में प्रत्येक संख्या और एक खाली पंक्ति (अंडरस्कोर रिक्त स्थान का प्रतिनिधित्व करता है):

1_ 
5_ 
8_ 
12_ 
_ 
_ 

मैं कैसे, संख्या जिस तरह से मैं चाहता हूँ जोड़ने के लिए बिना किसी स्पेस समारोह मिलता है?

+1

के insted अगर आप इतना यकीन कर रहे हैं, तो यह आपके कोड में जोड़ने है। php फ़ंक्शंस रिक्त स्थान नहीं जोड़ता LOL –

उत्तर

0

आपके द्वारा प्रदान किए गए कोड में कुछ भी नहीं है जो उन रिक्त स्थान उत्पन्न करेगा, जब तक कि $commentnumber में पहले से ही स्थान शुरू हो। यदि ऐसा है, तो बस इसके बजाय trim($commentnumber) का उपयोग करें।

आपके कोड में कुछ भी नहीं है जो फ़ाइल के निचले हिस्से में खाली रेखाओं को समझाएगा, जब तक कि $commentnumber खाली स्ट्रिंग न हो। यदि ऐसा है, और आप इसे 0 नंबर को आउटपुट करना चाहते हैं, तो intval($commentnumber) का उपयोग करें।

बेशक, आपको उन दोनों में से केवल एक की आवश्यकता है। यदि आप स्ट्रिंग जैसी सामग्री को संरक्षित करना चाहते हैं, तो trim() का उपयोग करें; यदि आप हमेशा पूर्णांक चाहते हैं, तो intval() का उपयोग करें, जो पहले से ही इसे स्वचालित रूप से ट्रिम करता है।

यह भी संभव है कि आपने " \n" को अपने वास्तविक कोड में "\n" के बजाय गलती से लिखा है, लेकिन आपके द्वारा यहां पोस्ट किए गए कोड में यह सही है।

+0

मैंने फिर से $ commentnumber के आउटपुट की जांच की। यह वास्तव में अंतरिक्ष के बिना है। अगर मैं 'echo $ commentnumber' करता हूं। \ N "', HTML आउटपुट मुझे लाइन ब्रेक करने के बजाए बाद में एक जगह दिखाता है। – user426965

+3

ठीक है, ** एचटीएमएल ** ** जो पूरी तरह से सामान्य है। – Timwi

+0

नहीं। क्योंकि मैंने लिखा अन्य स्क्रिप्ट में, यह एक सही लाइन ब्रेक/नई लाइन करता है। – user426965

44

क्या आपने PHP ईओएल निरंतर प्रयास किया था?


file_put_contents($filename, $commentnumber . PHP_EOL, FILE_APPEND) 

--- जोड़ा गया ---

मैं सिर्फ पता है कि मेरी फ़ाइल संपादक एक ही करता है, लेकिन worrie मत करो, बस एक भूत चरित्र वहाँ संपादक स्थानों है कि संकेत करने के लिए वह यह है कि है एक नई पंक्ति आप की कोशिश कर सकते इस

 
A file with EOL after the last number looks like: 
1_ 
2_ 
3_ 
EOF 

but a file without that last character looks like 

1_ 
2_ 
3 
EOF 

where _ means a space character 

आप PHP का उपयोग कर अंदर क्या है


$lines = explode(PHP_EOL, file_get_contents($file)); 
foreach($lines as $line) { 
    var_dump($line); 
} 

देखने के लिए फ़ाइल की सामग्री पार्स करने के लिए कोशिश कर सकते

... मुश्किल

+0

हां, "\ n" का उपयोग करने जैसी ही समस्या। – user426965

+0

वास्तव में अच्छा और परिष्कृत तरीका –

1

परेशान पंजीकरण, आपके पास बिल्कुल ठीक है। PHP_EOL और "\ n" बिल्कुल वही हैं।

आपके द्वारा प्रदान किया गया कोड कुछ भी गलत नहीं है, इसलिए यह $ commentnumber का मूल्य होना चाहिए जिसमें इसके अंत में एक स्थान हो। जैसा कि कहा गया है, trim() फ़ंक्शन के माध्यम से अपनी $ commentnumber चलाएं।

file_put_contents($filename, trim($commentnumber . "\n"), FILE_APPEND); 

शुभकामनाएँ।

+4

ट्रिम फ़ंक्शन आपकी नई लाइन को ट्रिम कर देगा;) शायद आप इसे लिखना चाहते हैं: file_put_contents ($ filename, trim ($ commentnumber)। \ N ", FILE_APPEND); –

0

अपना कोड और प्रतिक्रिया पढ़ने के बाद, मैं एक सिद्धांत के साथ आया हूं ...

चूंकि मैं नहीं देख सकता कि आपके कोड में कुछ भी गलत है, आपने फ़ाइल को कैसे खोल और पढ़ा? क्या आपने वास्तव में इसे एक टेक्स्ट एडिटर में खोल दिया था? क्या आपने इसे करने के लिए PHP स्क्रिप्ट का उपयोग किया था? यदि ऐसा है, तो फ़ाइल को एक टेक्स्ट एडिटर के साथ खोलें और जांचें कि वास्तव में प्रत्येक पंक्ति के अंत में रिक्त स्थान हैं। यदि वास्तव में है ... ठीक है, तो बाकी के जवाब को अनदेखा करें। यदि नहीं, तो बस पढ़ें।

उदाहरण के लिए, यदि आप कुछ इस तरह का उपयोग करें:

<?php 
$lines = file($filename); 
if($lines) // Error reading 
    die(); 
foreach($lines as $line) 
    echo $line."<br />"; 

तो फिर तुम होगा हमेशा रास्ता file() काम की वजह से लाइन के अंत में एक खाली स्थान के। सुनिश्चित करें कि प्रत्येक$lineमें एक व्हाइटस्पेस नहीं है - जैसे कि न्यूलाइन कैरेक्टर - अंत में।
के बाद से एचटीएमएल सभी व्हाइटस्पेस संभालती है - रिक्त स्थान, टैब, नई-पंक्तियों आदि - रिक्त स्थान के रूप में, अगर वहाँ $line के अंत में एक खाली स्थान के है, तो उन HTML आउटपुट में रिक्त स्थान के रूप में दिखाई देता है।

समाधान: लाइनों के अंत में सफेद जगहों को हटाने के लिए rtrim($line) का उपयोग करें। निम्नलिखित कोड का उपयोग करना:

<?php 
$lines = file($filename); 
if($lines) // Error reading 
    die(); 
foreach($lines as $line) 
    echo rtrim($line)."<br />"; 

पहला उदाहरण के रूप में ही समस्या नहीं है, और पंक्तियों के अंत में सभी रिक्त स्थान चला गया हो जाएगा।

13

पाउल्स के उत्तर में सही दृष्टिकोण है लेकिन उसकी गलती है। क्या आप पहली निम्नलिखित की जरूरत है:

file_put_contents($filename, trim($commentnumber).PHP_EOL, FILE_APPEND); 

PHP_EOL निरंतर सही लाइन मैक को समाप्त होने का उपयोग सुनिश्चित करता है, खिड़कियां और यूनिक्स प्रणालियों ट्रिम समारोह स्ट्रिंग के दोनों किनारों पर किसी भी नई पंक्ति या खाली स्थान के निकाल देता है। पूर्णांक में परिवर्तित करने के लिए एक विशाल गलती हो क्योंकि 1. आप expecially सफेद स्थान या विशेष वर्ण की वजह से, शून्य होने अंत हो सकता है होता है (चाहे वे कहीं भी से ... आते हैं) 2. आईडी जरूरी पूर्णांकों होने की जरूरत है न

0

क्योंकि हर बार जब आप फ़ाइल में लिखते हैं, तो फ़ाइल समाप्त हो रही है, file_put_contents अंत में

9

ओह दोस्तों पर एक अतिरिक्त लाइन ब्रेक डालने वाला है! बस का उपयोग करें

\ r \ n

\ N

संबंधित मुद्दे