• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:外部ファイルの検索結果を変数に代入)

名前を外部ファイルから取得する方法

このQ&Aのポイント
  • 外部ファイルから名前を取得する方法について悩んでいます。名前はファイル内に<start1>と<end1>、<start2>と<end2>、<start3>と<end3>で囲まれていますが、変数に代入する方法が分かりません。
  • 外部ファイルから名前を取得する方法を教えてください。名前はファイル内に<start1>と<end1>、<start2>と<end2>、<start3>と<end3>で囲まれています。
  • 外部ファイルから名前を取得する方法を教えてください。ファイル内に<start1>と<end1>、<start2>と<end2>、<start3>と<end3>で囲まれた部分をそれぞれ変数に代入したいですが、どうすればよいでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

んじゃあこんな感じで。 use strict; use warnings; my @names = qw(dummy); while (my $line = <DATA>) { chomp $line; my ($n, $name, $m) = $line =~ m{<start(\d)>(.+?)<end(\d)>}; next if ($n != $m || !defined $name); $names[$n] = $name; } print join ':', @names; __END__ <start1>正くん<end1> <start2>花子さん<end2> <start3>太郎くん<end3> 実行結果: dummy:正くん:花子さん:太郎くん 実データはゴミ(不要な部分)があっても大丈夫なはずです。 ただし<start?>と<end?>が複数行にわたると ダメです(対処できますが)。 一応 <start1>名前<end2>みたいな変なデータは 蹴っ飛ばすようにしてます。 配列の添え字は0から始まるので0番目にダミーデータを 入れてますが、その辺は好きにいじってください。

popai01
質問者

お礼

これを当てはめると、希望通りの動きになりました! なるほど、これは自分では書けそうもなかったので大変助かりました。 本当にありがとうございます。 いつか教えられる側になれるよう、もっと勉強します!

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

代入先が $name[1], $name[2], $name[3] のように 配列になっちゃいけませんか? お望みの動作もやってやれなくはありませんが 正直お勧めできません。

popai01
質問者

補足

配列で問題ありません。 3つより増えることはないのでスカラー変数でいいかと思いましたが、 配列の方が断然扱いやすいですね。考え足らずでした。 よろしくお願いします。

関連するQ&A