perl初心者です。
後ろの行を読んで、戻って、指定の行に、書き込む方法が、よくわかりません。
下記のようなファイルを読み込んで
----------------------------
アルファベット=
1A
2B
3C
アルファベット=
1A
2B
アルファベット=
1A
2B
3C
4D
5E
6F
------------------------------
下記のように、「アルファベット=」にアルファベットを入れるには、どうしたらいいでしょうか?
------------------------------
アルファベット=ABC
1A
2B
3C
アルファベット=AB
1A
2B
アルファベット=ABCDEF
1A
2B
3C
4D
5E
6F
--------------------------------
よろしくお願い致します。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
後の行のデータを前の行の末尾に追加するには、1行毎の処理ができませんので、
一時的な配列を利用する等になるかと思います。以下は、簡単なコード例です。
use strict;
my @block = ();
while (my $line = <DATA>) {
if ($line =~ /^アルファベット/) {
print "$block[0]\n", @block[1 .. $#block] if @block;
chomp $line;
@block = ($line);
} else {
$block[0] .= substr($line, 1, 1);
push @block, $line;
}
print "$block[0]\n", @block[1 .. $#block] if eof;
}
__DATA__
アルファベット=
1A
2B
3C
アルファベット=
1A
2B
アルファベット=
1A
2B
3C
4D
5E
6F
No.3
- 回答日時:
すでにあるファイルの末尾にデータ(文字)の追加はできますが、末尾以外への挿入は Perlの入出力機能では出来ません。
普通は、No.1さんのおっしゃる様にファイル全部を読み込んで変更してファイル全部を書き戻す処理になるでしょう。 処理速度を上げたいなら工夫の余地はありますが、プログラミングの初心者さんがトライすべきテーマでは無いと思います。
No.2
- 回答日時:
> 後ろの行を読んで、戻って、指定の行に、書き込む方法
そのままのアルゴリズムで。
書き込むときに1行分のlengthを変数に取っておき、
書き直したい行を発見したらseekで戻る。
No.1
- 回答日時:
とりあえずお手軽に処理するなら、
※メモリに全てを読み込んで処理をしたあと、メモリから元のファイルに上書きする。
って方法があります。最近のPCはメモリーも大きいですし、仮想記憶の機能もあるので、そうとう大きなファイルをメモリーで処理しても、問題ないでしょう。
なお、一発でうまくいくとは限らないので、とりあえず別ファイルに書き出し、OKになったらリネームする方法がいいかもしれません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
ことしの初夢、何だった?
2025年になりましたね。1年の吉凶を占う風習といわれている初夢。ことし初めて見た夢、覚えていますか?
-
あなたの「プチ贅沢」はなんですか?
お仕事や勉強などを頑張った自分へのご褒美としてやっている「プチ贅沢」があったら教えてください。
-
AIツールの活用方法を教えて
みなさんは普段どのような場面でAIツール(ChatGPTなど)を活用していますか?
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
Perlで特定行から特定行までを抜き出したい
Perl
-
Perlで行頭にある文字が含まれている行を全部削除して詰めたい
Perl
-
巨大なテキストの最終行を取得するには
Perl
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・ことしの初夢、何だった?
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
openした後、closeしないでプロ...
-
MATLAB グローバル変数の宣言
-
エクセルVBA コードが同じでも...
-
alarmのタイムアウト後の処理で...
-
CSVが可変長の場合の検索方法
-
VBAでCSVファイルを途中行まで...
-
ExcelをCSV書き出す場合のシー...
-
Windowsで複数のファイルを同じ...
-
LinuxのC言語で、ファイル名の...
-
fopenでディレクトリ内の全ファ...
-
vba dir の相対パス
-
ファイル全てを .xlsm に変更し...
-
シンボリックリンクを検出でき...
-
perlでcsvの指定フィールドに書...
-
LWPでPOST送信した後に送信先に...
-
Perlでファイルの末尾から指定...
-
batファイルでrenameができませ...
-
重複するデータを抽出できる秀...
-
DOSコマンドで、標準出力を出力...
-
Perlでハードウェア制御?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでCSVファイルを途中行まで...
-
VBAでCSVファイルの特定行を書...
-
エクセルVBA コードが同じでも...
-
ExcelをCSV書き出す場合のシー...
-
openした後、closeしないでプロ...
-
JavaでCSVファイルを高速に読む...
-
MATLAB グローバル変数の宣言
-
VB6.0でDB接続する際に切断時の...
-
ReadLineでの読み出し行を指定する
-
VBAで巨大なファイルの途中から...
-
Perlの変数に文字数制限(容量...
-
エクセルマクロについて CSVフ...
-
MATLABでのwhile文の条件について
-
C言語でのファイルのデータ更...
-
C#でCSVファイルを逐一更新したい
-
CSVファイルの内容を編集する方...
-
VBScriptでファイル保存先のデ...
-
ADOによるCSVファイルからのデ...
-
2つのCSVファイルをマッチング
-
CSVが可変長の場合の検索方法
おすすめ情報