2011-11-10 15 views
6

मेरे पास एक कोड है जो फ़ाइल में लाइनों के माध्यम से लूप करता है, और शुरुआत और अंत में जोड़े गए कुछ के साथ प्रत्येक पंक्ति को मुद्रित करने का प्रयास करता है।पर्ल आउटपुट खुद को ओवरराइट करता है

हालांकि, मुझे इस तरह का आउटपुट मिलता है: "नाममात्र गायों"।

मूल रूप से, रेखा के बाद थोड़ा (नाममात्र) इसकी शुरुआत को ओवरराइट करता है। मुझे पता है कि चंप और रेगेक्स लाइनों को हटाने से इस प्रभाव को रोक दिया जाता है, लेकिन मुझे रिक्त स्थान के बिना एक लाइन पर होना चाहिए। मुझसे कहां गलती हो रही है?

while ($line = <INPUT>) { 

     chomp $line; 
     $line =~ s/ //g; 
     printf "\@attribute %s nominal\n", $line; 
} 
+3

'@ विशेषता 'के तत्व क्या हैं? –

+1

क्षमा करें, बचने वाले चार को याद किया, यह सादा टेक्स्ट (\ @att ...) – blitzen

उत्तर

10

आपकी इनपुट फ़ाइल शायद एमएस विंडोज से सीआर-एलएफ के रूप में एन्कोडेड लाइन के अंत में है। सीआर को हटाने के लिए आप s/\r// भी कर सकते हैं।

+1

ग्रेट था! यह ठीक है कि क्या गलत हो रहा था, मुझे याद होगा कि भविष्य में :) (मैंने अपने समाधान में $ line = ~ s/\ r // g का उपयोग किया था)। चीयर्स! – blitzen

6

आपके पास अपने चर में \r हो सकता है। \s उपयोग करके देखें:

$line =~ s/\s//g; 

\s के अर्थ के लिए perlre देखें।

+0

मुझे लगता है कि SO उत्तरों स्वयं निहित होना चाहिए। अधिक जानकारी के लिए लिंक के साथ '\ s' के अर्थ की व्याख्या क्यों न करें? – Sparky

+0

'\ r' (कैरिज रिटर्न) से छुटकारा पाने के लिए आपकी सफेद जगह को क्यों हटाया जाएगा? '$ लाइन = ~ एस/\ आर // जी'; उस ने कहा, कोरोबा का जवाब शायद मूल कारण है (वही समाधान) –

+1

बढ़िया! यह ठीक है कि क्या गलत हो रहा था, मुझे याद होगा कि भविष्य में :) (मैंने अपने समाधान में $ line = ~ s/\ r // g का उपयोग किया था)। चीयर्स! – blitzen

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