すいません。教えてください。
テスト,:10,田中<TANAKA>NONAMAEHA一郎<ITIROU>TO言<I>IMASU,N000,123,__,050210,99999,
が$_に入っているとして、これを
テスト,:10,田中NONAMAEHA一郎TO言IMASU,N000,123,__,050210,99999,
テスト,:10,田中NONAMAEHA一郎TOIIMASU,N000,123,__,050210,99999,
テスト,:10,田中NONAMAEHAITIROUTO言IMASU,N000,123,__,050210,99999,
テスト,:10,田中NONAMAEHAITIROUTOIIMASU,N000,123,__,050210,99999,
テスト,:10,TANAKANONAMAEHA一郎TO言IMASU,N000,123,__,050210,99999,
テスト,:10,TANAKANONAMAEHA一郎TOIIMASU,N000,123,__,050210,99999,
テスト,:10,TANAKANONAMAEHAITIROUTO言IMASU,N000,123,__,050210,99999,
テスト,:10,TANAKANONAMAEHAITIROUTOIIMASU,N000,123,__,050210,99999,
というように<>の部分を展開してout.txtというファイルに出力するプログラムを作りたいです。
どうか、よろしくお願い致します。
No.1
- 回答日時:
$_に入っている文字列ですが、この形では無理ですね。
<TANAKA>を田中と対応させていますが、<>を特殊文字と考えれば
TANAKAは取り出せますが、これが田中と対応するのを理解するには
常識を前提とした推理が必要です。
<田中|TANAKA>ならば<>|を特殊文字とすえば可能でしょう。
やりかたは色々あると思いますが、初心者向けの単純な方法として
つぎのような手順ではどうでしょう。
1.aaa<bbb>ccc<ddd>eee<fff>ggg の文字列を<>で分割し、
aaa bbb ccc ddd eee fff ggg の7個の文字列に分解する。
index関数とsubstr関数でできます。
2.bbb ddd fff を更に|で分解する。
これもindex関数とsubstr関数でできます。
3.次に全組み合わせの結合された文字列を作る。
$a = $b . $c;のように結合できます。
以下URLで全てできるはずです。
http://www.tohoho-web.com/wwwperl.htm
頑張ってください。
No.2
- 回答日時:
open(OUT, ">out.txt") or die;
s/<.*?>//g; # s/<[A-Z]+>//g or s/<[^>]*>//g
print OUT $_;
close(OUT);
No.3
- 回答日時:
$_="テスト,:10,田中<TANAKA>NONAMAEHA一郎<ITIROU>TO言<I>IMASU,N000,123,__,050210,99999,";
@a=split /,/;
$a[2]=~s/([^A-Z].*?)<([A-Z].*?)>/\2/g;
print join(",",@a) . ",";
No.4ベストアンサー
- 回答日時:
$_="テスト,:10,田中<TANAKA>NONAMAEHA一郎<ITIROU>TO言<I>IMASU,N000,123,__,050210,99999,";
@a = split(/,/,$_,-1);
@b = $a[2] =~ /([^A-Z][^<]*)<([A-Z]+)>/g;
($fmt = $a[2]) =~ s/[^A-Z][^<]*<[A-Z]+>/%s/g;
open(OUT, ">out.txt");
foo([@b], []);
close(OUT);
sub foo {
my @b = @{$_[0]};
my @c = @{$_[1]};
my @d = splice(@b, 0, 2);
if (@d) {
foo([@b], [@c,$d[0]]);
foo([@b], [@c,$d[1]]);
return;
}
$a[2] = sprintf($fmt, @c);
print OUT join(",", @a)."\n";
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/02 11:48
- 中学校 間違った国語の実力テストの勉強? 1 2022/08/28 15:59
- その他(プログラミング・Web制作) VB.NETの正規表現について 4 2022/04/12 16:54
- 学校 高校一年生で通信制高校に通っています!前期中間テストと前期期末テストが終わりました。前期中間テストと 2 2022/10/01 00:31
- Excel(エクセル) エクセルの参照について教えてください 1 2022/12/08 16:06
- 学校 カンニングしたいと思う心をなくす方法を教えてください。 5 2022/05/24 07:35
- 高校受験 今中3で受験生なんですけど、明日2回目の実力テストがあって、私、高校私立専願で受けるんですよ、、 そ 2 2022/09/07 18:16
- 高校 高3 一学期中間テストと期末テストどちらも欠席した場合留年になりますか?鬱でテスト勉強が出来なくてや 2 2022/06/26 13:36
- 高校受験 高校受験を控える中3です。 質問があります。学校で定期テストがなくなりました。今まではテストがあった 2 2022/06/17 22:59
- 事件・犯罪 webテスト代行業者が逮捕された件は抑止のための見せしめ逮捕だと思いますか? また、今後 田中容疑者 3 2022/11/29 20:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
while文がうまく動かない
-
ifstream/ofstream について
-
perlでCSVをソートする方法につ...
-
Pythonでegrep機能をつかいたい
-
batファイルでrenameができませ...
-
エラー 'dir.h' : No such fi...
-
HTMLのフォームで画像と文...
-
ExcelをCSV書き出す場合のシー...
-
awkスクリプトでダブルクォーテ...
-
Perlの変数に文字数制限(容量...
-
readdir()で得られるファイル・...
-
ファイル全てを .xlsm に変更し...
-
while(<ハンドラ>) {} で行数を...
-
パスから最後のディレクトリだ...
-
テキストデータから指定した1...
-
一定時間が経過したフォルダの削除
-
htaccessで特定のディレクトリ...
-
ReadLineでの読み出し行を指定する
-
1行がやたら長いテキストをバッ...
-
chdirがうまくできない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル名を複数個配列で確保...
-
Fortranで1行飛ばして読み込む方法
-
perlで指定範囲を複数ファイル...
-
Pythonでegrep機能をつかいたい
-
「パスが見つかりません」とい...
-
ifstream/ofstream について
-
テキストファイルの各行を配列...
-
Perlのワンライナーをスクリプ...
-
ifstream を利用した1行分のテ...
-
C++でのテキストファイル読み込...
-
perlプログラム 外部複数ファ...
-
system関数と引数について
-
Perl 重複カウント 上位3名
-
Pythonで非日本語のUnicode文字...
-
shellのコマンド deffの差分の...
-
perlで先頭の数値をみて昇順に...
-
Visual Basicを使って三平方の...
-
while文がうまく動かない
-
Perl Grepについて
-
Perlによるディレクトリ内の連...
おすすめ情報