XMLから行列を作成し、テキストに出力しようとしています。
XMLには複数人がそれぞれ好む色が書かれています。
それをもとに、以下のような行列を作りたいと考えています。
Perlのプログラムのコードを教えてください。よろしくおねがいします。
--------XML-------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<person_list>
<person id="1001">
<keywords><keyword>赤</keyword><keyword>青</keyword></keywords>
</person>
<person id="1002">
<keywords><keyword>赤</keyword><keyword>黄</keyword></keywords>
</person>
<person id="1003">
<keywords><keyword>黄</keyword></keywords>
</person>
</person_list>
------------------------------------------------------------------
--------テキスト-------------
1001 1002 1003
赤 1 1 0
青 1 0 0
黄 0 1 1
-----------------------------
No.1ベストアンサー
- 回答日時:
while で読み込んで、それぞれの人単位に処理することになると思います。
人についてはその都度出力できますが、色についてはその都度出力できないので while ループが終わった後で出力することになります。なお、表示の関係で半角スペースを \x20 としていますが、実際のプログラムでは半角スペースで差し支えありません。use strict;
my @result = (['赤'], ['青'], ['黄']);
print "\x20\x20";
while (<DATA>) {
if (/<person/ .. /<\/person>/) {
if (/id="(\d+)"/) {
printf "%5d", $1;
push @$_, "\x20\x20\x20\x200" foreach @result;
}
$result[0]->[-1] = "\x20\x20\x20\x201" if /<keyword>赤<\/keyword>/;
$result[1]->[-1] = "\x20\x20\x20\x201" if /<keyword>青<\/keyword>/;
$result[2]->[-1] = "\x20\x20\x20\x201" if /<keyword>黄<\/keyword>/;
}
}
print "\n";
print @$_, "\n" foreach @result;
__DATA__
<?xml version="1.0" encoding="UTF-8"?>
<person_list>
<person id="1001">
<keywords><keyword>赤</keyword><keyword>青</keyword></keywords>
</person>
<person id="1002">
<keywords><keyword>赤</keyword><keyword>黄</keyword></keywords>
</person>
<person id="1003">
<keywords><keyword>黄</keyword></keywords>
</person>
</person_list>
この回答への補足
ありがとうございます。
上の例ではうまくできました。
実際のデータは色データが1000種類ほどあるため、すべての色をプログラムに書くのが困難です。
このようなときに配列の色データを用いて手間を省く方法を教えていただけないでしょうか。
No.2
- 回答日時:
前回のプログラムを修正してみました。
色データは冒頭の配列 @color に入れる形で、ファイル読み込み等でセットすればうまくいくものと思います。use strict;
my @color = ('赤', '青', '黄');
my @result = map { [$_] } @color;
print "\x20\x20";
while (<DATA>) {
if (/<person / .. /<\/person>/) {
if (/id="(\d+)"/) {
printf "%5d", $1;
push @$_, "\x20\x20\x20\x200" foreach @result;
}
foreach my $i (0 .. $#color) {
$result[$i]->[-1] = "\x20\x20\x20\x201" if /<keyword>$color[$i]<\/keyword>/;
}
}
}
print "\n";
print @$_, "\n" foreach @result;
__DATA__
<?xml version="1.0" encoding="UTF-8"?>
<person_list>
<person id="1001">
<keywords><keyword>赤</keyword><keyword>青</keyword></keywords>
</person>
<person id="1002">
<keywords><keyword>赤</keyword><keyword>黄</keyword></keywords>
</person>
<person id="1003">
<keywords><keyword>黄</keyword></keywords>
</person>
</person_list>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- MySQL UPDATE my_items SET item_name '赤い,甘い,ケーキ' WHERE id 1 2023/01/03 09:52
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- その他(動画サービス) https://otologic.jp/free/se/game-fighting01.html h 2 2022/07/28 17:18
- 雑誌・週刊誌 12月22日頃880円で発売する予定の絶世ワールドクラスvol.9を絶対に手に入れる方法を教えてくだ 1 2022/11/25 16:46
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストファイルで提出とは?
-
INDIRECT 横に再度抽出したい
-
perlで2次元配列をサブルーチ...
-
perlをバージョンアップしたら...
-
openした後、closeしないでプロ...
-
Strawberry Perl for Windows ...
-
Perl 重複カウント 上位3名
-
perlでリテラル値はメモリにど...
-
perlのrequireの動き方について...
-
Windows10においての『Perl』の...
-
TeraPadエディターの操作方法に...
-
Wコロン
-
perl qw 中でコメントアウトす...
-
Perl テキスト 列検索
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
INDIRECT 横に再度抽出したい
-
perlをバージョンアップしたら...
-
openした後、closeしないでプロ...
-
Perlで特定文字列から特定文字...
-
Wallpaper Engineでおすすめの...
-
Perlのエラーについてご教授く...
-
アルファベットに付いて質問し...
-
Strawberry Perl for Windows ...
-
bashスクリプト
-
テキストファイルで提出とは?
-
Perl の外部モジュールの利用方法
-
#!/usr/bin/perlで書きだしたCG...
-
Windows10においての『Perl』の...
-
perlのflock関数でロックをかけ...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlのrequireの動き方について...
-
画像が表示でnull; this.src
-
ターミナルで特定の文字と文字...
-
英数文字列のうちの数値を4桁に...
おすすめ情報