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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JavaでCSVファイルを高速に読む...
-
VBAでCSVファイルの特定行を書...
-
形態素解析の解析内容を各品詞...
-
CSVが可変長の場合の検索方法
-
vNoteのBODY部の取得(長めです)
-
openした後、closeしないでプロ...
-
VBAでCSVファイルを途中行まで...
-
VB6.0でDB接続する際に切断時の...
-
プログラミング(流れ図とコー...
-
拡張子 ”log” と ” dat” の違い
-
VBAコードを張り付け後のエクセ...
-
バッチファイルの作り方(CSV→...
-
batファイルでrenameができませ...
-
close()で例外が投げられる理由
-
vba dir の相対パス
-
MATLABのm-fileについて
-
文字列をカウントする方法
-
至急お願いします。C言語で.img...
-
一定時間が経過したフォルダの削除
-
画像アップロード機能を追加し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでCSVファイルの特定行を書...
-
ExcelをCSV書き出す場合のシー...
-
openした後、closeしないでプロ...
-
VBAでCSVファイルを途中行まで...
-
VBAで巨大なファイルの途中から...
-
ReadLineでの読み出し行を指定する
-
JavaでCSVファイルを高速に読む...
-
MATLAB グローバル変数の宣言
-
エクセルVBA コードが同じでも...
-
Perlの変数に文字数制限(容量...
-
perlで、後ろの行を読んで、前...
-
C言語でのファイルのデータ更...
-
2つのCSVファイルをマッチング
-
VB6.0でDB接続する際に切断時の...
-
CSVが可変長の場合の検索方法
-
perlで容量の大きいCSVファイル...
-
1ファイルずつ読み込みたい
-
VBScriptでファイル保存先のデ...
-
perl で googleAPIを呼び出す...
-
C#でCSVファイルを逐一更新したい
おすすめ情報