यदि आपकी फ़ाइल लाइन या रिकॉर्ड उन्मुख, आप लाइनों डालने या कोर मॉड्यूल Tie::File के साथ आसानी से अलग-अलग लाइनों संशोधित कर सकते हैं इस फ़ाइल में एक सरणी और पर्ल स्ट्रिंग और सरणी हेरफेर के रूप में इलाज किया जा करने की अनुमति देगा का उपयोग किया जा रहा है स्मृति में फ़ाइल को संशोधित करने के लिए। आप इस विधि के साथ अपनी रैम से बड़ी फ़ाइलों पर सुरक्षित रूप से काम कर सकते हैं।
यहाँ एक उदाहरण है:
use strict; use warnings;
use Tie::File;
#create the default .txt file:
open (my $out, '>', "nums.txt") or die $!;
while(<DATA>) { print $out "$_"; }
close $out or die $!;
tie my @data, 'Tie::File', "nums.txt" or die $!;
my $offset=5;
my $insert="INSERTED";
#insert in a string:
$data[0]=substr($data[0],0,$offset).$insert.substr($data[0],$offset)
if (length($data[0])>$offset);
#insert a new array element that becomes a new file line:
splice @data,$offset,0,join(':',split(//,$insert));
#insert vertically:
$data[$_]=substr($data[$_],0,$offset) .
substr(lc $insert,$_,1) .
substr($data[$_],$offset) for (0..length($insert));
untie @data; #close the file too...
__DATA__
123456789
234567891
345678912
456789123
567891234
678912345
789123456
891234567
912345678
आउटपुट:
12345iINSERTED6789
23456n7891
34567s8912
45678e9123
56789r1234
I:N:St:E:R:T:E:D
67891e2345
78912d3456
891234567
912345678
Tie::File
साथ फ़ाइल संशोधनों जगह में बने होते हैं और के रूप में सरणी संशोधित किया गया है। आप अनुरोध के अनुसार संशोधित और सम्मिलित करने के लिए फ़ाइल की पहली पंक्ति पर Tie::File
का उपयोग कर सकते हैं। आप वैकल्पिक रूप से सरणी mods के बीच sleep
डाल सकते हैं और फ़ाइल पर tail -n +0 -f
का उपयोग करें और फ़ाइल परिवर्तन देखने के यदि आप चाहें तो ...
, यदि आपकी फ़ाइल उचित आकार है और आप वर्ण की तरह ही यह इलाज करना चाहते हैं, आप पढ़ सकते हैं पूरी फ़ाइल मेमोरी में, डेटा पर स्ट्रिंग ऑपरेशन करें, फिर संशोधित डेटा को वापस लिखें। पर विचार करें:
use strict; use warnings;
#creat the default .txt file:
open (my $out, '>', "nums.txt") or die $!;
while(<DATA>) { print $out "$_"; }
close $out or die $!;
my $data;
open (my $in, '<', "nums.txt") or die $!;
{ local $/=undef; $data=<$in>; }
close $in or die $!;
my $offset=5;
my $insert="INSERTED";
open (my $out, '>', "nums.txt") or die $!;
print $out substr($data,0,$offset).$insert.substr($data,$offset);
close $out or die $!;
__DATA__
123456789
2
3
4
5
6
7
8
9
आउटपुट:
12345INSERTED6789
2
3
4
5
6
7
8
9
आप पात्रों के रूप में फ़ाइलों का इलाज करते हैं, तो सावधान रहना है कि Windows के तहत, पाठ मोड में फ़ाइलों को एक नई लाइन के लिए एक \r\n
है। द्विआधारी मोड में खोले जाने पर यह दो अक्षर हैं।
क्या आपने एक ऐसे मोड का उपयोग करने का प्रयास किया है जो संलग्न नहीं करता है? जैसे कि: ओपन (मेरा $ एफएच, '<+', "try.txt") या $ die !; (यह ओपन() का एक और "आधुनिक" उपयोग भी है, http://perldoc.perl.org/functions/open.html देखें) –
@ ओविंद स्काकर यह '" <"' '' '" <+ " '। –
@chas सही आप कर रहे हैं .. –