Perl初心者です
アルファイルの一部を別のファイルの指定箇所にかき込みたいのですが、どのようにすればいいのか分かりません。
ファイルAにはデータが1行に1つ入っています。それをファイルBの指定した場所にかき込みたいです。
ファイルBはテキストファイルで
1:3年AaaaA組
2:今週の担当はAbbbA
3:月曜日の1限目はApppA
4:担当の先生はAqqqA
5:持ってくるものはArrrA
6:月曜日の2限目はAsssA
7:担当の先生はAtttA
8:持ってくるものはAuuuA
という具合です。
以下同様のものが数組繰り返します。
AファイルにはA***Aの部分にかき込みたい情報が1行づつのデータになっています。
いろいろ探してみて、見よう見まねで
*************
#test.pl
open(A, "<A.txt");
while (<A>) {
@lines = <>;
}
open(B, ">B.txt");
while (<B>) {
s/AaaaA/$lines[1]/g;
s/AbbbA/$lines[2]/g;
print B;
}
close(B);
close(A);
#end
**********
こんなものをつくってみましたが、さっぱりダメでした。
WIN MEで
*********
jperl test.pl > test.txt
*********
こんなバッチファイルを作成して実行しています。
どなたかお力をお貸し願えるとありがたいです。
よろしくお願いします。
No.5ベストアンサー
- 回答日時:
#4>実行したあとB.txtのファイルの中身が空っぽになってしまう
まさに、危惧していたとおり・・
再度書きますが
B.txt に書き出さない場合は、
open(B, ">B.txt");
print B $B;
close(B);
の部分のopen と close を削除して
print $B;
だけにすればいいです。
#4でいうと
最後の
open(C, ">C.txt");
print $C;
close(C)
のような部分は、C.txt に書き出しをしていないので、
print $C;
だけでいいです。
No.4
- 回答日時:
#3で
>print $B;
>として
としか書いてませんが、
B.txt に書き出さない場合は、
#open(B, ">B.txt");
print $B;
#close(B);
のようにB.txtファイル書き出しに関する部分をコメントアウトするか削除して下さい。
この回答への補足
#3のアドバイスを元にして、実行をさせていただきました。そうすると、実行したあとB.txtのファイルの中身が空っぽになってしまうので、ちょっとだけ下手な工夫をしました。B.txtはテンプレートで再度使うこともあるからです。
以下のバッチファイルを作って実行しました
********
jperl copy.pl B.txt > C.txt
jperl copy.pl B.txt > D.txt
jperl test01.pl > text01.txt
jperl test02.pl > text02.txt
*********
それぞれのファイルの中身は
copy.plが
****************
while(<>)
{
print;
}
# end
****************
test01.plが
*****************
open(A, "<A.txt");
@lines = <A>;
close(A);
chomp @lines;
if(open(C, "<C.txt")){
local $/ = undef;
$C = <C>;
close(C);
}
$C=~ s/AaaaA/$lines[0]/g;
$C=~ s/AbbbA/$lines[1]/g;
$C=~ s/AcccA/$lines[2]/g;
$C=~ s/AdddA/$lines[3]/g;
$C=~ s/AeeeA/$lines[4]/g;
$C=~ s/AfffA/$lines[5]/g;
$C=~ s/AgggA/$lines[6]/g;
$C=~ s/AhhhA/$lines[7]/g;
$C=~ s/AiiiA/$lines[8]/g;
$C=~ s/AjjjA/$lines[9]/g;
$C=~ s/AkkkA/$lines[10]/g;
$C=~ s/AlllA/$lines[11]/g;
$C=~ s/AmmmA/$lines[12]/g;
$C=~ s/AnnnA/$lines[13]/g;
open(C, ">C.txt");
print $C;
close(C)
*******************
test02.plが
********************
open(A, "<A.txt");
@lines = <A>;
close(A);
chomp @lines;
if(open(D, "<D.txt")){
local $/ = undef;
$D = <D>;
close(D);
}
$D=~ s/AaaaA/$lines[14]/g;
$D=~ s/AbbbA/$lines[15]/g;
$D=~ s/AcccA/$lines[16]/g;
$D=~ s/AdddA/$lines[17]/g;
$D=~ s/AeeeA/$lines[18]/g;
$D=~ s/AfffA/$lines[19]/g;
$D=~ s/AgggA/$lines[20]/g;
$D=~ s/AhhhA/$lines[21]/g;
$D=~ s/AiiiA/$lines[22]/g;
$D=~ s/AjjjA/$lines[23]/g;
$D=~ s/AkkkA/$lines[24]/g;
$D=~ s/AlllA/$lines[25]/g;
$D=~ s/AmmmA/$lines[26]/g;
$D=~ s/AnnnA/$lines[27]/g;
open(D, ">D.txt");
print $D;
close(D);
*********************
とうものです。A.txtのデータの数が変わったので、少し扱う行数が変わっています。
きっと、ぶさいくどころではないものだとは思うのですが、これで希望が叶いました。
本当にありがとうございました。
No.3
- 回答日時:
open(A, "<A.txt");
@lines = <A>;
close(A);
chomp @lines;
if(open(B, "<B.txt")){
local $/ = undef;
$B = <B>;
close(B);
}
$B=~ s/AaaaA/$lines[0]/g;
$B=~ s/AbbbA/$lines[1]/g;
$B=~ s/ApppA/$lines[2]/g;
$B=~ s/AqqqA/$lines[3]/g;
$B=~ s/ArrrA/$lines[4]/g;
$B=~ s/AsssA/$lines[5]/g;
$B=~ s/AtttA/$lines[6]/g;
$B=~ s/AuuuA/$lines[7]/g;
open(B, ">B.txt");
print B $B;
close(B);
----------------------------------------------------------------
B.txt をテンプレートとして使っていて置き換える必要がなく、
置き換えた結果をtest.txt として得るのであれば、
print B $B;
は、
print $B;
として
jperl test.pl > test.txt
として下さい。
B.txt を置き換える場合は、
jperl test.pl
でよいです
No.1
- 回答日時:
open(B, ">B.txt");
でOPENした時点でB.txtの内容は消えてしうので想定通りに動作しません。
あと、使用しない test.txtを指定しても意味がないです。
jperl test.pl > test.txt
単に jperl test.pl で動くと思います。
open(B1, "<B.txt");
@line_b = <B1>;
close(B1);
open(A, "<A.txt");
@line_a = <A>;
close(A);
open(B2, ">B.txt");
$i=0;
foreach (@line_b) {
if ($_ =~ /A(.+)A/) {
s/A(.+)A/$line_a[$i]/g;
$i++;
}
print B2;
}
close(B2);
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA Functionプロシージャで複...
-
VBAでCSVファイルを途中行まで...
-
VBAでCSVファイルの特定行を書...
-
DOSコマンドで、標準出力を出力...
-
batファイルでrenameができませ...
-
パスから最後のディレクトリだ...
-
VBAで巨大なファイルの途中から...
-
エクセルVBA コードが同じでも...
-
ReadLineでの読み出し行を指定する
-
バッチファイルの作り方(CSV→...
-
教えて!perlから.exeファイル...
-
fopenでディレクトリ内の全ファ...
-
dos変数の%~dp0は powershellで...
-
VB6.0でDB接続する際に切断時の...
-
close()で例外が投げられる理由
-
オーバーラップ計算法について
-
【エクセル】改行無しテキスト...
-
エクセルVBAで素数だけを出力す...
-
Perl UTF8で出力
-
window.open でのファイル指定方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル名を複数個配列で確保...
-
Pythonでegrep機能をつかいたい
-
ドットを含まないファイルの表示
-
「パスが見つかりません」とい...
-
C++でのテキストファイル読み込...
-
perlでCSVをソートする方法につ...
-
テキストファイルの各行を配列...
-
配列を用いた文字置換
-
perlかベクターなどのフリーウ...
-
ファイル中の記述文字の一括置...
-
コントロール配列
-
shellのコマンド deffの差分の...
-
perlで先頭の数値をみて昇順に...
-
perlプログラム 外部複数ファ...
-
ファイル操作について、テキス...
-
VBA Functionプロシージャで複...
-
ファイル名に日付を入れてアッ...
-
Perl 禁止語句について
-
system関数と引数について
-
Fortranで1行飛ばして読み込む方法
おすすめ情報