Tôi là một noob.I cần một số kiến thức cơ bản về cách lưu dữ liệu và đọc theo perl. Nói để lưu một băm và một mảng. Định dạng (mở rộng) của tệp nào nên được sử dụng? txt? Cho đến nay tôi chỉ có thể lưu tất cả mọi thứ dưới dạng chuỗi print FILE %hash
và đọc lại chúng dưới dạng chuỗi print <FILE>
. Tôi nên làm gì nếu tôi cần hàm băm và mảng của hàm từ một tệp. Làm thế nào để đưa chúng trở lại băm và mảng?Lưu trữ và đọc băm và mảng trong các tệp trong Perl
Trả lời
Bạn đang tìm kiếm dữ liệu serialization. Các lựa chọn phổ biến mạnh mẽ là Sereal, JSON::XS và YAML::XS. Các định dạng ít được biết đến là: ASN.1, Avro, BERT, BSON, CBOR, JSYNC, MessagePack, Protocol Buffers, Thrift.
khác lựa chọn thường được đề cập là Storable và Data::Dumper (hoặc tương đương)/eval
, nhưng tôi không thể khuyên họ bởi vì định dạng storable là Perl phiên bản phụ thuộc, và eval
là không an toàn vì nó thực thi mã nhị phân. Tính đến năm 2012, bộ phận phân tích cú pháp Data::Undump vẫn chưa tiến triển rất xa. Tôi cũng không thể khuyên bạn nên sử dụng XML vì nó không ánh xạ tốt các loại dữ liệu Perl và có nhiều lược đồ cạnh tranh/không tương thích làm thế nào để dịch giữa XML và dữ liệu.
ví dụ Mã (thử nghiệm):
use JSON::XS qw(encode_json decode_json);
use File::Slurp qw(read_file write_file);
my %hash;
{
my $json = encode_json \%hash;
write_file('dump.json', { binmode => ':raw' }, $json);
}
{
my $json = read_file('dump.json', { binmode => ':raw' });
%hash = %{ decode_json $json };
}
use YAML::XS qw(Load Dump);
use File::Slurp qw(read_file write_file);
my %hash;
{
my $yaml = Dump \%hash;
write_file('dump.yml', { binmode => ':raw' }, $yaml);
}
{
my $yaml = read_file('dump.yml', { binmode => ':raw' });
%hash = %{ Load $yaml };
}
Bước tiếp theo lên khỏi đây là object persistence.
Cũng đọc: Serializers for Perl: when to use what
Bài đăng hay, daxim. +1. Nhiều, rất nhiều. :) – verisimilitude
tài nguyên tuyệt vời. Cảm ơn. –
Perlmonks có hai cuộc thảo luận tốt về serialization.
Điều này thực sự phụ thuộc vào cách bạn muốn lưu trữ dữ liệu của bạn trong tập tin của bạn. Tôi sẽ cố gắng viết một số mã perl cơ bản để cho phép bạn đọc một tệp vào một mảng và hoặc viết lại một băm vào một tệp.
#Load a file into a hash.
#My Text file has the following format.
#field1=value1
#field2=value2
#<FILE1> is an opens a sample txt file in read-only mode.
my %hash;
while (<FILE1>)
{
chomp;
my ($key, $val) = split /=/;
$hash{$key} .= exists $hash{$key} ? ",$val" : $val;
}
Vâng. sử dụng mô-đun CPAN hiện tại sẽ phù hợp hơn là mã thô. – verisimilitude
Xin lỗi. Tôi có nghĩa là để đăng nó như là một bình luận ở đó. – verisimilitude
Thú vị và hữu ích. Cách tiếp cận này có giá trị trong một số môi trường nơi các mô-đun không dễ cài đặt. Tôi đồng ý một cách tiếp cận ưa thích sẽ được sử dụng dữ liệu :: Dumper (mà đã đi một chặng đường dài trong những năm gần đây) hoặc mô-đun khác. –
Nếu bạn mới tôi chỉ đề nghị làm cho chuỗi từ mảng/băm với join() và họ viết nó với "in" và sau đó đọc và sử dụng split() để làm cho mảng/băm một lần nữa. Đó sẽ là cách đơn giản hơn như ví dụ về sách giáo khoa của Perl.
và nhược điểm là gì? –
Có thể khó giải quyết một vấn đề phức tạp hơn mảng hoặc băm (ví dụ: mảng đa chiều). –
- 1. đọc tệp PPM và lưu trữ nó trong một mảng; được mã hóa với C
- 2. Cách đọc các giá trị từ tệp excel và lưu trữ trong Array?
- 3. Mảng và chỉ số âm trong Perl
- 4. Mật khẩu băm, muối và lưu trữ các giá trị băm
- 5. Phá vỡ chuỗi và lưu trữ nó trong mảng
- 6. Cách lưu các từ điển và mảng trong cùng một kho lưu trữ (với numpy.savez)
- 7. Lưu trữ một băm MessagePacked trong Redis
- 8. Làm cách nào để gọi tên hàm được lưu trữ trong băm trong Perl?
- 9. Lưu trữ và tải các mảng có nhiều mảng như các tập tin
- 10. Lưu trữ mảng với Doctrine và MongoDB
- 11. Lưu trữ mảng trong Solr
- 12. Làm cách nào để đọc và thao tác các tệp PDF 1.5 trong Perl?
- 13. Lưu trữ mật khẩu băm trong MySQL
- 14. Truyền mảng, vô hướng và băm đến chương trình con trong Perl
- 15. Visual Studio lưu trữ các dấu trang và định dạng nào được lưu trữ trong đó?
- 16. Lưu trữ các chuỗi kết nối trong machine.config và lưu trữ chúng trong web.config
- 17. iOS và hủy lưu trữ các tệp xib
- 18. Làm cách nào để truyền các kiểu dữ liệu mảng và băm cho các đối số con trong perl?
- 19. Perl, chuyển đổi băm thành mảng
- 20. C - làm thế nào để sử dụng PROGMEM để lưu trữ và đọc mảng char
- 21. Grails và Tomcat: Nơi lưu trữ các tệp đã tải lên trong hệ thống tệp?
- 22. Lọc một băm băm trong perl
- 23. Cách hiệu quả để lưu trữ từ điển (băm) trong tệp bằng python?
- 24. Looping thông qua một mảng băm trong Perl
- 25. Lấy chiều dài của một mảng trong một băm Perl
- 26. Perl: Đọc tệp văn bản web và "mở" nó
- 27. Làm thế nào tôi có thể lưu trữ ảnh chụp regex trong một mảng trong Perl?
- 28. C-như mảng trong perl
- 29. Lưu trữ một mảng String trong SharedPreferences
- 30. Thủ tục lưu trữ để mở và đọc một tệp văn bản
Bạn có thể xem các mô-đun như [Storable] (http://search.cpan.org/perldoc?Storable) hoặc [Data :: Dumper] (http://search.cpan.org/perldoc?Data: : Dumper). – TLP
** Dữ liệu :: Dumper ** sẽ giúp bạn lưu trữ mảng/băm như vậy. Bạn có thể sử dụng lại chúng thông qua ** require/eval ** – tuxuday