मैं एकाधिक वर्ण लंबाई के आधार पर एक रेखा को विभाजित करना चाहता हूं और उन्हें अलग-अलग चरों में संग्रहीत करना चाहता हूं।
पूर्व के लिए:$myString = "Mickey 24 USA alive
यहां पहले 12 वर्ण उपयोगकर्ता नाम हैं, अगले 2 आयु हैं, अगले 23 वर्ण देश हैं और अगले 7 स्थिति हैं।
तो उन्हें अलग से सहेजने के लिए उन्हें बचाने के लिए एक तरीका है split()
या s///
?
धन्यवाद,
उत्तर:
जवाब के लिए 3 № 1मिलान करने के लिए एक रेगेक्स का प्रयोग करें, या ए substr
:
my $myString = "Mickey 24 USA alive";
if ($myString =~ /(.{12})(.{2})(.{23})(.*)/) {
$name = $1;
$age = $2;
$country = $3;
$status = $4;
print "<$name><$age><$country><$status>";
} else {
warn "line not long enough";
}
आउटपुट:
<Mickey ><24>< USA>< alive>
तथ्य के बाद चर से दूरी को पट्टी करने के लिए, बस एक और regex का उपयोग करें:
$value =~ s/^s+|s+$//g;
इसका उपयोग करके एक ही पंक्ति में भी कर सकते हैं:
s/^s+|s+$//g for ($name, $age, $country, $status);
जवाब के लिए 8 № 2
फिक्स्ड-चौड़ाई वाले फ़ील्ड को अनपॅक करना सबसे सरल और कुशलता से उपयोग किया जाता है unpack
अंतर्निहित कार्य.
ऐशे ही
use strict;
use warnings;
my $my_string = "Mickey 24 USA alive";
my ($username, $age, $country, $status) = unpack "a12 a2 a23 a7", $my_string;
print <<__END_OUTPUT__;
"$username"
"$age"
"$country"
"$status"
__END_OUTPUT__
उत्पादन
"Mickey "
"24"
" USA"
" alive"
उत्तर № 3 के लिए 1
टिम टॉडी इस पर व्यस्त रहे हैं। पिछले पोस्टर्स द्वारा ऊपर वर्णित अनुसार अनपॅक के साथ अपना खुद का रोल करें या शायद सीपीएएन मॉड्यूल के चयन से एक का उपयोग करें जो इस तरह के काम को स्नैप बनाता है।
भी उपलब्ध - डेटा :: फिक्स्डफॉर्मेट - AnyData :: प्रारूप :: फिक्स्ड - पाठ :: फिक्स्डविड्थ
उत्तर के लिए -1 № 4
यदि आपने चौड़ाई वाले फ़ील्ड को अनपैक का उपयोग किया है।
कुछ इस तरह:
my ($username, $age, $country, $status) = unpack("A12A2A23A7", $myString);