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

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

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

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ruby

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

5回答

626閲覧

Rubyで拡張子を一括置換するプログラムを作りたい

Eston

総合スコア67

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ruby

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2018/02/14 10:13

編集2018/02/16 01:03

ターミナル上で、Rubyを使い、テキストファイル(.txt)を、HTMLファイル(.html)に一括で変換するプログラムを作りたいと考えています。

カレントディレクトリではないです。

txtをhtmlに変換するソフトなどを使うわけではなく、あくまでRubyのコードだけで、すでにあるテキストファイルをhtmlファイルに変換する方法を模索しております。
ーーーーーーーーーーーーーーーーーーーーーー
require "fileutils"
FileUtils.mv("ex012.txt", "ex012.html")
ーーーーーーーーーーーーーーーーーーーーーー
上記のやり方で、トライしましたが、
これだと、ex012.txt以外のファイルはhtmlファイルに変換できないので、、、、

複数のファイルの拡張子を一括変更する方法を考えているのですが、うまくできません。

自分でも調べて見たのですが、変換ソフトを使うやり方が多く見られました。

その後、
require "file"
File.rename .txt .html *.txt
を試していますが、エラーが起きるようです。

rename をRubyのコードに落とし込む方法をご教授いただければと思います。
よろしくお願いいたします。

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

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

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

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

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

guest

回答5

0

まずは、どんなテキストからどんなHTMLを得たいのか、仕様を決めましょう。

極端な例として、テキストファイルをそのまま<pre>の中に出力させてしまえば、(エスケープなどの問題はありますが)いちおう正当なHTMLが出来上がりますが、そういうのを求めているわけでは、おそらくないでしょう。

ある程度テキストレベルで構造を表現したい、というのであれば、元のテキストをMarkdownで書けば、既存の変換ライブラリを使えます。

投稿2018/02/14 10:37

maisumakun

総合スコア145121

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

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

Eston

2018/02/14 10:51

まずは、回答ありがとうございます。しかし、私の知識不足で少々理解できない点がありました。 もう少し、私の方でも調べていきたいと思います。 ありがとうございました。
maisumakun

2018/02/15 00:17

まずは、最初の「テキストファイル」ですが、「これからテキスト形式で作成するもの」「すでにテキスト形式で存在するもの」「何かのツールが定期的に作成していくもの」など、テキストファイルの形態によって、どうすればいいのかは違ってきます。 ごく少量であれば、「手作業で作成」というのが見栄えなど総合面を考えればいちばん合理的になる、という可能性すらあります。
guest

0

カレントディレクトリにあるファイルの拡張子を一括して変更したいってことですね。

fileutils 以外で、使う機能的には、このあたりでしょうか。

  • ディレクトリ内のファイル名を取得: Dir.glob

  • 文字列を置き換える: String#gsub


とりあえず、回答例。
エラーチェックなどしていません。

ruby

1require 'fileutils' 2 3before = ARGV[0] 4after = ARGV[1] 5 6Dir.glob("*.#{before}").each do |filename| 7 newname = filename.gsub( /.#{before}$/, ".#{after}" ) 8 print "#{filename} -> #{newname}\n" 9 FileUtils.mv(filename, newname) 10end

投稿2018/02/15 09:55

CHERRY

総合スコア25171

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

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

Eston

2018/02/15 10:37

ありがとうございます。 現在fileutilsの方で考えていました。 僕の質問が曖昧だったのですが、カレントディレクトリではなく、既存のディレクトリで行う方法を模索していました。
guest

0

テキストがどういうものなのかにもよると思いますが、もしcsv形式とかであれば

  • テキスト(csv)の読み取り
  • erb(テンプレート)の使用
  • ファイル保存

でcsv形式で保存してあるtextをhtmlに変換しています。

何かの参考になれば幸いです。

投稿2018/02/15 00:12

yatta47

総合スコア208

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

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

Eston

2018/02/15 01:53

なるほど、テキストの形式にもよるのですね。 ありがとうございます。
guest

0

自己解決

コマンドラインで使える rename コマンドと、 Ruby の File クラスの rename メソッドは全く別のものであり同じ使い方ができないことがわかりました。

File.rename の使い方は API リファレンスマニュアルを読んだ限りでは、1つのファイルのファイル名の変更(必要ならディレクトリの移動)を行うものらしいので、、、

そのためプログラムから File.rename で拡張子を変更したいならファイルの一覧を抽出してそれをループして各ファイルに対して拡張子を変更した新しいファイル名を作成して、File.rename() を呼び出すという考え方に至りました。
ーーーーーーーーーーー
require 'fileutils'
old_ext = ".txt"
new_ext = ".html"

Dir::glob("./*#{old_ext}").each do |filename|
newfilename = filename.gsub(/#{old_ext}$/, new_ext);
print "filename => #{filename}, newfilename => #{newfilename}\n"
File.rename(filename, newfilename)
end
ーーーーーーーーーーー

で実行できました。回答していただき本当にありがとうございました。

投稿2018/02/16 02:28

Eston

総合スコア67

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

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

0

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
require "fileutils"
FileUtils.mv("ex012.txt", "ex012.html")
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
プログラムととして合っているかはわかりませんが、
ターミナルコマンドの
mvでファイルの名称を変えることができるので、
それをプログラムに落とし込みました。
参考にしたサイトは
https://techacademy.jp/magazine/6406    =>ターミナルコマンドについて 
http://www.shigemk2.com/entry/2014/02/15/ =>FileUtilsについて

ちなみに、二つ目のサイトでは、require "fileutils"はいらないということになっていますが、
必要です。(require "FileUtils"と大文字を入れてしまうとエラーになります。

しかし、これではこれだとファイル名がex012.txtでないとhtmlファイルへ変換されないので、拡張子がtxtのファイルをhtmlファイルへ変換するようにはできないので、正確な答えには遠いかと、、、、、

投稿2018/02/15 01:52

編集2018/02/15 05:12
Eston

総合スコア67

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

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

yatta47

2018/02/15 02:08

拡張子を変えるだけという意味でしたか。完全に読み違えてました。 てっきり ``` テストページ ``` というテキストファイルを ``` <html> <body> テストページ </body> </html> ``` みたいなコンバートをイメージしていました。 兎にも角にも解決して何よりです。
Eston

2018/02/15 02:10

いえ、私の方こそわかりづらい質問をしてしまって申し訳ありません。 いずれ、いただいたご回答を実際に使う場面が必ずあるので、大変勉強になりました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問