2013-01-21 6 views
25

मैं पर्ल में "एक विशिष्ट लंबाई तक एक स्ट्रिंग को छोटा करने" में असमर्थ हूं। क्या कोई भी निर्मित तरीका है?पर्ल में एक विशिष्ट लंबाई में एक स्ट्रिंग को कैसे छंटनी करें?

अद्यतन:

इनपुट: $str = "abcd";

निर्गम (3 अक्षरों के लिए काट-छांट): $ str abc

+1

आप बेहतर स्पष्टता के लिए एक नमूना इनपुट/आउटपुट दे सकते हैं? –

उत्तर

36

आप substr() फ़ंक्शन का उपयोग करना चाहते हैं।

$shortened = substr($long, 0, 50); # 50 characters long, starting at the beginning. 

अधिक के लिए, perldoc

perldoc -f substr 

का उपयोग आपके मामले में, यह होगा:

$str = 'abcd'; 
$short = substr($str, 0, 3); 
+1

उत्तर के लिए धन्यवाद :) –

1

अगर मैं सही ढंग से समझ है, तो आप phpwordwrap() एक स्ट्रिंग की तरह करने की जरूरत है, इसलिए:

use Text::Format; 
print Text::Format->new({columns => 50})->format($string); 

यदि तुम सिर्फ पहला एन पात्रों की जरूरत है:

print substr $string, 0, 50; 
3

जब तक आपके मूल स्ट्रिंग कम से कम 3 वर्ण लंबा है, तो आप उपयोग कर सकते हैं एक lvalue के रूप में substr पर एक कॉल।

my $str = "abcd"; 
substr($str, 3) = ""; 
print "$str\n"; # prints "abc" 

स्ट्रिंग की प्रारंभिक लंबाई, जांच की जानी है कि यह कम से 3 अक्षरों, वापसी के लिए (अधिक जानकारी के लिए perldoc -f substr देखें) नहीं सौंपा जा सकता है substr को यह कॉल के महत्व है और करने के लिए प्रयास की आवश्यकता हो सकती ऐसा करने से एक त्रुटि होगी।

1

या आप ऐसा करने के लिए regexp का उपयोग कर सकते हैं।

#!/usr/bin/perl -w 

use strict; 

my $str = "abcd"; 

$str =~ /(\w{0,3})/; 
print $1; 
8

मनमाना लंबाई के एक स्ट्रिंग है, जहां truncate लंबाई स्ट्रिंग की लंबाई से अधिक समय हो सकता है के लिए, मैं एक प्रतिस्थापन

$str =~ s/.{3}\K.*//s; 

छोटे तार के लिए के लिए चुनते हैं, प्रतिस्थापन से मेल नहीं खाएगी और स्ट्रिंग होगा अपरिवर्तित हो।सुविधाजनक \K भागने एक lookbehind अभिकथन, या एक सरल कब्जा करने के साथ बदला जा सकता है:

s/(?<=.{3}).*//s # lookbehind 
s/(.{3}).*/$1/s # capture 
+2

रुचि रखने वालों के लिए नोट: perl v5.20 (कम से कम) में, दिखने वाले दावे की लंबाई 255 तक सीमित है। – Bentoy13

1

सबसे प्राकृतिक तरीका हिस्सा आप चाहते हैं निकालने के लिए substr उपयोग करने के लिए है:

$first_n = substr($string, 0, $n); 

यदि आप केवल चाहते हैं स्ट्रिंग को संशोधित करने और आप इसे कम से कम इच्छित लंबाई है कुछ कर रहे हैं:

substr($string, $n) = ''; 

आप निश्चित नहीं हैं, तो आप कर सकते हैं:

+०१२३५१६४१०६१
use List::Util "min"; 
substr($string, min($n, length($string))) = ''; 

या अपवाद को पकड़ने:

eval { substr($string, $n) = '' }; 
1

यह substr() या नियमित अभिव्यक्ति के बजाय, यह भी है कि उल्लेख करने के लिए शायद उपयोगी है, आप printf या sprintf इस्तेमाल कर सकते हैं।

perldoc -f sprintf देखें:

स्ट्रिंग रूपांतरण के लिए, एक सटीक निर्दिष्ट करने को स्ट्रिंग ट्रंकेटस निर्दिष्ट चौड़ाई फिट:

printf '<%.5s>', "truncated"; # prints "<trunc>" 
    printf '<%10.5s>', "truncated"; # prints "<  trunc>"