Làm thế nào để đọc một văn bản tin trong Perl

Nhiệm vụ. Đó là một tập tin văn bản. Bạn cần để tải nội dung của nó vào một vô biến trong một Perl chương trình.

Một vấn đề như vậy xuất hiện khá thường. Ví dụ, một vấn đề như vậy có thể xảy ra đọc cấu hình các tập tin hay nhỏ dữ liệu, tập tin. Nếu bạn cần xử lý một tập tin lớn, nó không phải là tốt hơn để sử dụng phương pháp này, và để sử dụng một dòng đọc từ một tập tin.

Giải pháp. Để sử dụng một thư viện Đường::Nhỏ

Các đơn giản và thuận tiện nhất là giải pháp để sử dụng Perl thư viện Đường::Nhỏ

#!/usr/bin/perl

use strict;
use warnings FATAL => 'all';
use utf8;
use open qw(:std :utf8);

use Path::Tiny;

my $file_name = 'a.txt';

my $content = path($file_name)->slurp_utf8();

print $content;

Đây path('a.txt') tạo ra một đối tượng của lớp Đường::Nhỏ, và ->slurp_utf8() gọi là phương pháp slurp_utf8 đối tượng này. Kết quả trong một biến $content Bật tất cả nội dung của các tập tin.

Đây là một giải pháp tốt, nhưng có một sự tinh tế. Thư viện Đường::Nhỏ không phải là Perl, nó phải được đưa riêng. Thường là nguyên nhân này không có vấn đề, nhưng trong một số tình huống, giải pháp này là không phù hợp.

Giải pháp. Để xem các tập tin với tiêu chuẩn, các công cụ Perl

Đây không phải là giải pháp rất thuận tiện như sử dụng thư viện Đường::Nhỏ, tôi có nhiều để viết, nhưng nó không cần lắp đặt thêm thư viện.

#!/usr/bin/perl

use strict;
use warnings FATAL => 'all';
use utf8;
use open qw(:std :utf8);

my $file_name = 'a.txt';

my $content = '';

open FILE, '<', $file_name or die $!;

while (<FILE>) {
    $content .= $_;
}

print $content;

Bằng cách sử dụng open , chúng tôi tạo ra một tập tin xử lý FILE. Khi làm việc với open điều quan trọng là dùng ba lập luận và nó rất quan trọng để viết or die, không || die. Sau đó, với sự giúp đỡ while (<FILE>) , chúng tôi chạy xung quanh nhà các tập tin dòng và thu thập tất cả các nội dung vào một biến $content.

Ban đầu, chúng tôi chỉ định một biến $content dòng trống ''. Điều này là cần thiết để làm cho mã làm việc một cách chính xác trong trường hợp của rỗng thấy (nếu bạn không chỉ định một chuỗi rỗng, trong trường hợp của một tập tin rỗng trong một biến $content sẽ undef).

Một rất nguy hiểm quyết định. Sử dụng cat

Đây là một cách làm thế nào bạn có thể đọc nội dung tập tin vào một biến. Giải pháp này không đòi hỏi thêm bất kỳ thư viện và không cần viết nhiều dòng mã, nhưng đây là một cành giải pháp. Tốt nhất là không bao giờ để viết. Cách duy nhất để làm được điều này là khi dự án đã không Path::Tany, là làm việc tích cực và để kiểm tra những bộ phận khác của chương trình cần một số nhanh mã mà đọc các tập tin. Nhưng trong trường hợp này, bạn cần tới để lại một bình luận # TODO và cơ hội đầu tiên để bỏ mã này.

#!/usr/bin/perl

use strict;
use warnings FATAL => 'all';
use utf8;
use open qw(:std :utf8);

my $file_name = 'a.txt';

my $content = `cat $file_name`;

print $content;

Tại sao đây là một quyết định xấu. Lần đầu tiên không có lỗi xử lý. Nếu các tập tin được không, lúc đầu lỗi tiêu chuẩn sẽ nhận được một lời cảnh báo cat: asdf: No such file or directory, nhưng chương trình sẽ đi xa hơn. Thứ hai, nó sẽ không hoạt động nếu tên tập tin có một không gian. Thứ ba, nếu các nội dung của biến $file_name , chúng tôi có được ở bên ngoài có một cơ hội rằng sẽ có cái gì đó như a.txt; rm -rf / và ngoài đọc các tập tin vẫn sẽ được thực thi hành vi không an toàn.

Các bài viết khác