0

データのiniファイルを保存したい。キューブメソッドをperlに保存するにはどうすればよいですか?

私は試した:

stylesheet.ini:

p   indent  noindent
h1  heading1
h2  heading2
h3  heading3
h4  heading4
h5  heading5
h6  heading6
disp-quote  blockquote

脚本:

my %stylehash;
open(INI, 'stylesheet.ini') || die "can't open stylesheet.ini $!\n";
my @style = <INI>;
foreach my $sty (@style){
      chomp($sty);
      split /\t/, $sty;
      $stylehash{$_[0]} = [$_[1], $_[2], $_[3], $_[4]];
}

print $stylehash{"h6"}->[0];

ここでは、$ [2]、$ [3]、$ _ [4]の不要な配列を割り当てます。最初のPタグは2つの配列を取得し、次にh1は1つの配列を取得するためです。どうすれば完全に保存でき、どうすれば取得できますか。

私は欲しい:

$stylehash{$_[0]} = [$_[1], $_[2]]; #p tag
$stylehash{$_[0]} = [$_[1]]; #h1 tag

print $stylehash{"h1"}->[0];
print $stylehash{"p"}->[0];
print $stylehash{"p"}->[1];

キューブメソッドを保存するにはどうすればよいですか。タグは常に一意であり、スタイル名はランダムに増減します。どうすればこの問題を解決できますか。

4

1 に答える 1

5

私が正しく理解していれば、値のリストを含むキーがたくさんあります。多分1つの値、多分2つ、多分3つ...そしてあなたはこれを保存したいと思います。最も簡単な方法は、これをリストのハッシュに組み込み、 Perlデータ構造を適切に処理するJSONなどの既存のデータ形式を使用することです。

use strict;
use warnings;
use autodie;

use JSON;

# How the data is laid out in Perl
my %data = (
    p     => ['indent', 'noindent'],
    h1    => ['heading1'],
    h2    => ['heading2'],
    ...and so on...
);

# Encode as JSON and write to a file.
open my $fh, ">", "stylesheet.ini";
print $fh encode_json(\%data);

# Read from the file and decode the JSON back into Perl.
open my $fh, "<", "stylesheet.ini";
my $json = <$fh>;
my $tags = decode_json($json);

# An example of working with the data.
for my $tag (keys %tags) {
    printf "%s has %s\n", $tag, join ", ", @{$tags->{$tag}};
}

配列のハッシュの操作の詳細。

于 2012-11-14T05:38:48.533 に答える