こんばんは。
最近Rubyでファイルのスクローリングをしているのですが、
以下のようなスクリプトを全てのファイルに適用したいと考えています。

1 fpath = '/home/edinet/E30479/S1002D1W/index.html'
2
3 text = ""
4
5
6 File.open(fpath).each do |f|
7 f.each_line do |line|
8
9 line.gsub!(/前事業年度特定投資株式/,"前事業年度")
10 line.gsub!(/当事業年度特定投資株式/,"当事業年度")
11
12 end
13 end
14
15
16 flag = nil
17 IO.foreach(fpath) do |line2|
18
19 case line2
20 when /保有目的が純投資目的以外/
21 flag = true
22 when /保有目的が純投資目的/
23 flag = false
24 end
25
26 text << line2.chomp if flag == true
27 end


Dir.globなどを使えば良いと思うのですが、具体的にはどのように記述すればよいのでしょうか?
ご教授の程お願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

あと、このプログラム、なんか変ですよ?



File.open(fpath).each

ここのeachって変ですよね。

f.each_line do |line|
line.gsub!(/前事業年度特定投資株式/,"前事業年度")

ここでの 変数lineに入っているのは、「ファイルから読み込んだ文字列」です。
ファイルの内容をメモリ上にコピーしたものです。
これを変更しても、元のファイルは変更されません。

また、一行読み込む度に次の行の内容になるので、gsubした結果はどこにも残りません。
    • good
    • 0

> Dir.globなどを使えば良いと思うのですが



そう思ったら、マニュアルとかで調べてみましょう。
http://docs.ruby-lang.org/ja/2.1.0/class/Dir.htm …

ディレクトリを再帰的に走査するUnixのコマンドがあります。
「 find 」と言います。
このことを知っていれば、Rubyにも同じようなものは無いか、探してみようと思うはずです。
http://docs.ruby-lang.org/ja/2.1.0/library/find. …

これらを使って見つけたファイル`パスをfpathに代入して、実行するようにします。
このスクリプト全体をループの中に入れてもいいですが、このスクリプトを関数として定義して、fpathは引数として与えるようにするのがよいでしょう。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qフォルダ内の変化を監視(FTPサーバのホームディレクトリ)

I-O DATAのHDL-120Uの簡易FTP機能で「ftpuser」というフォルダがあります。

このフォルダの変化を監視するため、​http://www10.plala.or.jp/tukaeru/soft/index.html#folders​
を使って監視させようとしたのですが、この「ftpuser」フォルダは予め設定しておいたユーザー名とパスワードを入力しないと開くことが出来ません。
そのため、「フォルダ監視」で監視させてもエラーになってしまいます。
予め手動でログインさせておいてから監視させれば、問題なく機能します。

これを省略させるか、これに変わる方法が何かないか、よい知恵をご教示願えませんか?

Aベストアンサー

監視対象のFTPフォルダのアクセス権が問題だと思います。
共有設定をまず確認して、セキュリティ上問題なければゲストユーザを追加すれば恐らく認証ポップアップは出ないかと思います。

QRubyでクラスファイルをディレクトリで階層化したい

いつもお世話になっています。
クラスファイルを違う階層にした時にうまくアクセスできなくて困っています
例えば
test/hoge.rbの中に定数HOGEがある場合、どうアクセスすればいいですか?
よろしくお願いします

Aベストアンサー

hoge.rbでクラスHogeを定義しているので、hoge.rbをrequireして、Hogeへのアクセスを記述します。
で、Foo.rbはこんな感じ:

require 'test/hoge.rb'
puts Hoge::HOGE;

Qftpホスト設定名を変数に入れフォルダ名にする

perl初心者です。

FTPの設定で、ホストの設定名・ホスト名(アドレス)などありますが、
FTPホストの設定名(HPSERVER)を変数として代入させ、その変数でフォルダ名として
使用することは可能でしょうか?


例えば、以下の場合

#FTPホスト名(アドレス)
111.111.111.111
#FTPホストの設定名
HPSERVER

#作成するフォルダ名(C直下に作成)
FTPホストの設定名(HPSERVER)

Aベストアンサー

当然できます.
実際にどうすればいいのかについては, その「FTPホストの設定名」とやらをどのように与えるかに依存します.

Q.sub(/.+/,"aaaaaaa#{$&}"の置換開始行がずれるのなぜでしょうか?

f = ["1111111111111","2222222222222","3333333333333",]
f.each {|l|
p l.sub(/^.+$/, "aaaaaaa#{$&}bbbbbb")
p l
p ""
}
を Ruby1.8.7(2008-08-11patchlevel72)[i386-mswin32] で実行すると下記のように .sub(・・・) での置換開始行がずれました。なぜでしょうか?教えてくださいお願いします。
"aaaaaaabbbbbb"
"1111111111111"
""
"aaaaaaa1111111111111bbbbbb"
"2222222222222"
""
"aaaaaaa2222222222222bbbbbb"
"3333333333333"
""

Aベストアンサー

未検証。Rubyの経験殆どなし。

ですが,
http://www.ruby-doc.org/core/classes/String.html#M000831
>.sub(・・・) での置換開始行がずれました。
メソッド自体が,そういう仕様なんじゃないの?

If the method call specifies replacement, special variables such as $& will not be useful,
もし、メソッド呼び出しがreplacementを指定知る時,$&のような特殊な変数は役に立たないだろう。

>as substitution into the string occurs before the pattern match starts.
なぜなら,文字列への置き換えは【パターンマッチが始まる前】に行われるからだ。

However, the sequences \1, \2, etc., may be used.
\1,\2...等の変数が用いられるだろう。

#Howeverは訳すと今ひとつしっくり来ないので訳さず

未検証。Rubyの経験殆どなし。

ですが,
http://www.ruby-doc.org/core/classes/String.html#M000831
>.sub(・・・) での置換開始行がずれました。
メソッド自体が,そういう仕様なんじゃないの?

If the method call specifies replacement, special variables such as $& will not be useful,
もし、メソッド呼び出しがreplacementを指定知る時,$&のような特殊な変数は役に立たないだろう。

>as substitution into the string occurs before the pattern match starts.
なぜなら,文字列への置...続きを読む

QFTPでフォルダごと転送

初歩的な質問ですみません。

FTPで任意のフォルダをまるごと転送するコマンドはありますか?
フォルダ内に階層はありません。

Aベストアンサー

確かフォルダ名を指定してというコマンドは無かったと思います。
但し、複数ファイルをワイルドカード指定でという事であれば、以下の様なコマンドがあります。
mget
mput
また、コマンドベースでは無く、GUIベースのFTPソフトを使えば、貴殿が行おうとしている事も可能だと思います。

QRubyにて、ファイルコピーする際に指定したbyte毎にファイルをコピ

Rubyにて、ファイルコピーする際に指定したbyte毎にファイルをコピーしていく方法

いつもお世話になっております。
Rubyのコーディング方法で分からないことがあります。
大変申し訳ございませんが、ご教授のほどよろしくお願い致します。

【ご質問】
以下のファイルがあるとします。
ファイル名:test.log
ファイルサイズ:2G

上記ファイルを500Mずつに分けてコピーしたい場合、
どのようにコーディングすればファイルを分けながらコピー出来るのでしょうか?

例)
【コピー元ファイル】
ファイル名:test.log
ファイルサイズ:2G

【コピー先のファイル】
ファイル名:test.log.1
ファイルサイズ:500M

ファイル名:test.log.2
ファイルサイズ:500M

ファイル名:test.log.3
ファイルサイズ:500M

ファイル名:test.log.4
ファイルサイズ:500M

※コピー先のファイル名には、
 コピー元のファイル名+「.」+「1からの数字の連番」でファイル名を割り振りたいです。

以上です。
よろしくお願い致します。

Rubyにて、ファイルコピーする際に指定したbyte毎にファイルをコピーしていく方法

いつもお世話になっております。
Rubyのコーディング方法で分からないことがあります。
大変申し訳ございませんが、ご教授のほどよろしくお願い致します。

【ご質問】
以下のファイルがあるとします。
ファイル名:test.log
ファイルサイズ:2G

上記ファイルを500Mずつに分けてコピーしたい場合、
どのようにコーディングすればファイルを分けながらコピー出来るのでしょうか?

例)
【コピー元ファイル】
ファイル名:test.log...続きを読む

Aベストアンサー

ファイルを指定サイズで複数ファイルに分割したいと言うことですね。

open("test.log","r") do |file|
# windowsだと file.binmode
i=0
while data=file.read(500*1024*1024)
i+=1
open("test.log.#{i}","w"} { |out| out.write data }
end
end

最後のファイルは500MB未満の可能性があります。

Qftpコマンドで再帰的にフォルダとファイルを見たい

コマンドプロンプトのftpコマンドを使用して、あるディレクトリ配下にあるフォルダとファイル一覧を再帰的に見たいです。
「コマンド:dir」では、ディレクトリ配下のフォルダ一覧は見れるのですが、フォルダの下にあるファイルまでは見ることができません。

どなたかご教授頂けるとうれしいです。
よろしくお願いします。

Aベストアンサー

ftpのサーバ側の設定しだいですが、
「dir -R」もしくは「ls -lR」で、
再帰的にファイル一覧が表示できる場合が多いと思います。

QRuby と Ruby on Rails

Ruby と Ruby on Railsは何が違うんでしょうか?

漠然とした質問ですいません。

Aベストアンサー

「日本語」と「書類作成テンプレート」みたいな物です。
日本語が出来ても、それだけで仕事が出来るわけではありませんよね。
どんなに優れた言語があっても、それで優れたシステムが作れるわけではありません。
むしろ、優れた開発支援システム(=フレームワーク)を使うために、そこで使われる言語を選ぶ場合があります。

QFTP フォルダアクセス権

先ほどhttp://oshiete.goo.ne.jp/qa/8600108.htmlこういった質問をさせていただき解決したと思ったのですが、もうひとつだけわからないことがありました。

会社で私がレンタルサーバーを借りてFTPのアカウントとかホームページ作成とかすべて任されています。

そこで、FTPのアカウントを作成する時にディレクトリを指定して見られたくない社員にファイルを見られなくする仕組みは先ほど質問して解答をいただいたのでわかりました。

ただ、私自身が社長のフォルダを見れなくするようにしたりすることは可能でしょうか?

例えば社長のディレクトリをhome/共有に
社員のディレクトリをhome/共有/社員にした場合、社長は共有のフォルダと社員のフォルダを見ることができ、社員は社員のフォルダしか見ることができないよう制限することができるのですが、


私のアカウントのディレクトリをhome/共有/社員にしたとしても、私はサーバーの管理画面のパスワードを知っているので、FTPアカウントを追加していくらでもhomeからすべてのフォルダ内を見ることが出来ます。

もちろん社長のフォルダを見るつもりはありませんが、ちゃんとしておきたいので可能であれば方法を教えてくださいm(_ _ )m

先ほどhttp://oshiete.goo.ne.jp/qa/8600108.htmlこういった質問をさせていただき解決したと思ったのですが、もうひとつだけわからないことがありました。

会社で私がレンタルサーバーを借りてFTPのアカウントとかホームページ作成とかすべて任されています。

そこで、FTPのアカウントを作成する時にディレクトリを指定して見られたくない社員にファイルを見られなくする仕組みは先ほど質問して解答をいただいたのでわかりました。

ただ、私自身が社長のフォルダを見れなくするようにしたりすることは可能でし...続きを読む

Aベストアンサー

>私のアカウントのディレクトリをhome/共有/社員にしたとしても、私はサーバーの管理画面のパスワードを知っているので、FTPアカウントを追加していくらでもhomeからすべてのフォルダ内を見ることが出来ます。

それは管理者としては当然の事ですので

・普段は一社員としてのアカウントで利用する
・管理する必要があるときのみ管理者のアカウントで利用する

と自制してください(管理者としてちゃんとするというのはそういうこと)。
管理者からもアクセスできないユーザーできたとしたら、
もしそのユーザーのアカウントで何か問題があって管理しないといけない状況でも管理者は何もできなくなってしまいますよ。

あと、

>例えば社長のディレクトリをhome/共有に
>社員のディレクトリをhome/共有/社員にした場合、

これはお勧めしません。
社長が操作ミスなりして社員のディレクトリを削除なりしたら消えますよ。

Qrubyプログラムからrubyプログラムを複数起動するには?

どなたかご存知の方。教えてください。
rubyの中で別のrubyのプログラムを起動したいのですが、
どのように記述したら良いでしょうか?
この際の親プログラムは子プログラムを起動する事だけが目的なので、
子プログラムの実行結果の取得はせずに、子プログラム起動後即終了するようにしたいです。

初心者なものでどのようにしたら良いかわからず、困っています。
よろしくお願いします。

Aベストアンサー

#4です。
fork & execが定番のやり方になります。
以下のようなスクリプトを作ってください。
ファイル名:test_fork.rb
--------------------------------
def start_proc(ruby_script)
pid = fork do
exec("/usr/bin/ruby" + " " + ruby_script)
end
end
print "main start\n"
start_proc("test1.rb")
start_proc("test2.rb")
print "main end\n"
-----------------------------------
start_procはruby_scriptを引数として、そのスクリプトをバックグラウンドで起動します。
(そのスクリプトの終了を待ちません)
テスト用に以下の2つのスクリプトを起動しますので、以下のスクリプトも作成してください。

ファイル名:test1.rb
------------------------------
print "test1.rb start\n"
sleep(10)
print "test1.rb end\n"
-------------------------------

ファイル名:test2.rb
-----------------------------
print "test2.rb start\n"
sleep(5)
print "test2.rb end\n"
-------------------------------

ruby test_fork.rb を実行します。
実行結果は以下のようになります。
-------------------------------------
main start
main end
test1.rb start
test2.rb start
test2.rb end
test1.rb end
-------------------------
test_fork.rbはテスト用スクリプトを起動後、直ちに停止しています。
尚、今回、start_proc("test1.rb")はフルパスでパス名を指定していません。(手抜きです。)
実際に運用される場合は、start_proc("/aaa/bbb/test1.rb")のようにフルパスで指定してください。

当方の環境は以下の通りです。
centos 6.5
ruby 1.9.3p551

#4です。
fork & execが定番のやり方になります。
以下のようなスクリプトを作ってください。
ファイル名:test_fork.rb
--------------------------------
def start_proc(ruby_script)
pid = fork do
exec("/usr/bin/ruby" + " " + ruby_script)
end
end
print "main start\n"
start_proc("test1.rb")
start_proc("test2.rb")
print "main end\n"
-----------------------------------
start_procはruby_scriptを引数として、そのスクリプトをバックグラウンドで起動します。
(そのスクリプトの終了を...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング