質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.39%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

3回答

3058閲覧

テキストファイルの最初の1行を削除したい

tarotarotarotar

総合スコア41

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

1クリップ

投稿2021/11/01 08:08

下記のようなtest.txtファイルがあります。

1test@test.jp 2test@test.jp 3test@test.jp 4test@test.jp

このファイルの1行目の行を削除したいです。(↓のようにしたいです。)

2test@test.jp 3test@test.jp 4test@test.jp

色々試して

ruby

1File.open('test.txt', mode = 'r+') do |t| 2 t.write('') 3end

などとやってみたのですが、上書きすることができませんでした。
教えていただけますと幸いです。

よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

tag が ruby だけ、ということは、「rubyでやるにはどうしたら良いだろうか」ということでしょうか。
それとも、1行目だけ削除したい rubyでなくても良い、ということでしょうか。

前者でしたら BeatStarさんの通りです。(変光星?)
後者でしたら unixの豊富なコマンド群を勉強してください。

例えば sed で1行目削除でしたら sed '1d' input_filename
これだと上書きではなく 標準出力に書き出されますので、上書きしたいなら、
sed -i 1d filename
不安でbackupは残しておきたいなら sed -i.back '1d' filename

投稿2021/11/01 08:46

winterboum

総合スコア23505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まず、プログラミングっていうのは『こう書けばいい』というものではありません。
簡単に言えば、「現実世界のシミュレーション」です。
そのロジック(論理)を記述するのです。

なので、いったんRubyが~とかを置いといて、『現実世界でならどうするか』を考えてみてください。

[言い換え] あるメモがある。そのメモの一番上の行だけ削除して更新しろ。ただし、最終的なメモはそのメモ用紙でなくても構わないとする。 [例1] 1test@test.jp 2test@test.jp 3test@test.jp 4test@test.jp ↓ 2test@test.jp 3test@test.jp 4test@test.jp

的な依頼かなんかだと考えてみてください。

私なら、最初のメモ用紙を メモ1 とします。そして別の似たような用紙を取り出してこれを メモ2 とします。さらにメモ1を見ながら、このメモ2に書いていく。

まずは "1test@test.jp" ですが、一番上にあるので書かない。
次に "2test@test.jp" ですが、これは二番目にあるのでメモ2に書く。
次に "3test@test.jp" ですが、これも三番目、つまり二番目以降なので書く。
...
と書いていき、最終行を書き終わると、もう メモ2 が最終的なメモになります。

これをやるだけです。

つまり、Rubyとかのようなプログラミング言語であれば、

1. 対象のファイルを開く 2. (暫定的な)書き込み先ファイルを開く 3. (1)のファイルが「これ以上ないぞ」と言うまでループ 3.1. もし現在の行が一行目でないなら 3.1.1. (2)のファイルに書き込む

的な処理になるはずです。

元のファイルに書き込みたいのであれば、

4. 元のファイルを削除する 5. 暫定的なファイルを元のファイル名に変える

的な処理もつければいけるはずです。

つまり、

別のファイルに書き込む -> 元のファイルを削除 -> 暫定的なファイルをリネームという感じでしょうか。

投稿2021/11/01 08:23

BeatStar

総合スコア4962

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

ruby

1contents = File.readlines("test.txt")[1...].join() 2File.write("test.txt", contents)

投稿2021/11/01 08:37

melian

総合スコア20369

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.39%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問