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も見ています
-
【お題】NEW演歌
【大喜利】 若い人に向けたことは分かるけど、それはちょっと寄せ過ぎて変になってないか?と思った演歌の歌詞
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
「覚え間違い」を教えてください!
私はかなり長いこと「大団円」ということばを、たくさんの団員が祝ってくれるイメージで「大円団」だと間違えて覚えていました。
-
自分のセンスや笑いの好みに影響を受けた作品を教えて
子どもの頃に読んだ漫画などが その後の笑いの好みや自分自身のユーモアのセンスに影響することがあると思いますが、 「この作品に影響受けてるな~!」というものがあれば教えてください。
-
【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
【お題】 ・急に朝起こしてきた母親に言われた一言とは?
-
Perlで特定行から特定行までを抜き出したい
Perl
-
Perlで行頭にある文字が含まれている行を全部削除して詰めたい
Perl
-
巨大なテキストの最終行を取得するには
Perl
-
-
4
perlで、[ \\r\\n , \\n ]の意味は?
CGI
-
5
特定の文字列を削除
Perl
-
6
Use of uninitialized value ---
Perl
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイルアイコンの左下に緑の□...
-
INDIRECT 横に再度抽出したい
-
Perl言語について。
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlについて
-
perlのrequireの動き方について...
-
perlの構文でカンマの意味が分...
-
perlについての質問
-
perlのプログラミング 部分入れ...
-
ペプシコーラとコカ・コーラとD...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでCSVファイルを途中行まで...
-
VBAでCSVファイルの特定行を書...
-
ExcelをCSV書き出す場合のシー...
-
エクセルVBA コードが同じでも...
-
openした後、closeしないでプロ...
-
ReadLineでの読み出し行を指定する
-
VBAで巨大なファイルの途中から...
-
JavaでCSVファイルを高速に読む...
-
perlで、後ろの行を読んで、前...
-
perlで容量の大きいCSVファイル...
-
MATLAB グローバル変数の宣言
-
Perlの変数に文字数制限(容量...
-
VB6.0でDB接続する際に切断時の...
-
エクセルマクロについて CSVフ...
-
C言語でのファイルのデータ更...
-
データファイルをプロットする(...
-
ファイルからのデータ読み込み...
-
csvファイル改行コードの置換に...
-
2つのCSVファイルをマッチング
-
行の途中のデータを置き換えたい
おすすめ情報