/ / पर्ल- वर्णों की विभिन्न लंबाई के आधार पर एक रेखा को कैसे विभाजित करें - perl, विभाजन

पर्ल-कैसे अलग-अलग अक्षरों के आधार पर एक रेखा को विभाजित करने के लिए - perl, विभाजन

मैं एकाधिक वर्ण लंबाई के आधार पर एक रेखा को विभाजित करना चाहता हूं और उन्हें अलग-अलग चरों में संग्रहीत करना चाहता हूं।
पूर्व के लिए:$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);