
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で質問しましょう!
似たような質問が見つかりました
- Access(アクセス) お世話になります ACCESSを使用しています 下記のクエリデータ(1)があります 商品名 行数 A 1 2022/09/05 08:52
- 政治 私の発明した「二階建て漢字」は使えるでしょうか? 3 2023/02/08 16:40
- Access(アクセス) capeofdragonと申します。 Access2016を使っております。 あるフォームがあり、テ 2 2022/09/09 13:18
- アジア ベトジェットエアの登録について 1 2023/07/03 14:43
- Visual Basic(VBA) CODE関数のvbaバージョンか方法はありますか? 5 2022/09/01 17:00
- 数学 下の写真で、△ABCと△ADEの合同を証明する時、∠BACを∠EAC、∠DAEを∠CAEと書いたらバ 6 2022/12/12 17:26
- その他(悩み相談・人生相談) 覚えるのが困難な字 それは… 実はアルファベットの小文字なんです。 どんなに勉強しても記憶に残り憎い 2 2022/05/12 22:45
- 英語 30代になっても英語のアルファベット全部言えないのは恥ずかしいでしょうか? アルファベットを言おうと 3 2023/04/02 15:59
- Excel(エクセル) ある範囲のセルに何を入力すると、別のセルに○を表示させる 3 2022/04/05 15:51
- 英語 義務教育の中学3年間で習う英語だけで日常会話から読み書きまで外国に行って通用しますか? 可能ならどん 8 2022/11/28 08:45
このQ&Aを見た人はこんなQ&Aも見ています
-
「それ、メッセージ花火でわざわざ伝えること?」
「それ、メッセージ花火でわざわざ伝えること?」というメッセージを教えて下さい
-
【お題】動物のキャッチフレーズ
【お題】「百獣の王 ライオン」「実は動物界最強 カバ」は分かるけど、それはちょっとピンと来ないなと思った動物のキャッチフレーズ
-
最速怪談選手権
できるだけ短い文章で怖がらせてください。
-
スタッフと宿泊客が全員斜め上を行くホテルのレビュー
スタッフも宿泊客も、一流を通り越して全員斜め上なホテルのレビューにありがちな内容を教えて下さい
-
あなたが好きな本屋さんを教えてください
どのくらいの規模間で、どのような本が並んでいるか、どのような雰囲気なのかなどなど...
-
Perlで行頭にある文字が含まれている行を全部削除して詰めたい
Perl
-
Perlで特定行から特定行までを抜き出したい
Perl
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで巨大なファイルの途中から...
-
エクセルVBA コードが同じでも...
-
CSVが可変長の場合の検索方法
-
MATLAB グローバル変数の宣言
-
VBAでCSVファイルを途中行まで...
-
合致する番号のデータを抽出す...
-
VBAでCSVファイルの特定行を書...
-
openした後、closeしないでプロ...
-
perlで容量の大きいCSVファイル...
-
VBScriptでファイル保存先のデ...
-
perlで、後ろの行を読んで、前...
-
Perlを改造してエラーチェック...
-
perl内でPHPを動かす?
-
ReadLineでの読み出し行を指定する
-
JavaでCSVファイルを高速に読む...
-
ExcelをCSV書き出す場合のシー...
-
vba dir の相対パス
-
window.open でのファイル指定方法
-
Perlのワンライナーをスクリプ...
-
batファイルでrenameができませ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA コードが同じでも...
-
VBAでCSVファイルを途中行まで...
-
ExcelをCSV書き出す場合のシー...
-
openした後、closeしないでプロ...
-
VBAでCSVファイルの特定行を書...
-
MATLAB グローバル変数の宣言
-
ReadLineでの読み出し行を指定する
-
JavaでCSVファイルを高速に読む...
-
C#でCSVファイルを逐一更新したい
-
Perlの変数に文字数制限(容量...
-
CSVが可変長の場合の検索方法
-
VB6.0でDB接続する際に切断時の...
-
C言語でのファイルのデータ更...
-
CSVファイルの内容を編集する方...
-
エクセルマクロについて CSVフ...
-
VBAで巨大なファイルの途中から...
-
ADOによるCSVファイルからのデ...
-
csvファイル改行コードの置換に...
-
perlにて2つのファイル比較
-
__DATA__の意味
おすすめ情報