
# データを書き換えるクラス
class DataReplacement
attr_writer :inputfile, :outputfile
# データを書き換える処理
def replace
output = File.read(@inputfile).split("\n").map do |content|
name, sex_code, tel = content.split(',')
last_name, first_name = name.split
[last_name, first_name, sex(sex_code), separated_tel(tel)].join(',')
end.join("\n")
File.write(@outputfile, output)
end
private
# 性別コードを文字列に変換
def sex(code)
code.to_i == 1 ? '男性' : '女性'
end
# 携帯電話番号をハイフン区切りに変換
def separated_tel(number)
number.match(/(\d{3})(\d{4})(\d{4})/)
"#{$1}-#{$2}-#{$3}"
end
end
replacement = DataReplacement.new
# 入力ファイルの指定
replacement.inputfile = ARGV[0]
# 出力ファイルの指定
replacement.outputfile = ARGV[1]
# データ書き換え
replacement.replace
というソースコードで、コマンドプロンプトで実行した結果、
コマンドには表示されず、excelの拡張子がcsvのファイルに書き出されるみたいなのですが、これも、文字化けしていて、同様の修正を施したものが、
山田,太郎,男性,090-0000-0000
山田,花子,女性,090-1111-1111
鈴木,次郎,男性,090-2222-2222
鈴木,桃子,女性,090-3333-3333
田中,三郎,男性,090-4444-4444
田中,梅子,女性,090-5555-5555
高橋,四郎,男性,090-6666-6666
高橋,桜子,女性,090-7777-7777
佐藤,五郎,男性,090-8888-8888
佐藤,李子,女性,090-9999-9999
がexcelの拡張子がcsvファイルに書き出されるみたいなのですが。教えて頂けると幸いです。
No.14ベストアンサー
- 回答日時:
>コピーの件については、inputdata.csvのファイルが、どこかに行った時用にまず、コピーしましょうと言うことでしょうか?
>そうか、一からrubyのプログラムを組みたい人用とかかもでしょうか?
作者がどのような意図でコピーしましょうと書いたのかはわかりません。
その作者のサイトのURLを提示していただければ、作者の意図が読み取れるかもしれません。
あまり、そのことにこだわる必要はないと思いますが・・・
>ですが、サンプルプログラムをダウンロードした時に、outputdata.csvも、既にあって、それは、文字化けしていましたが。
>これは、BOM有りになっていなかったからですね。
はい、そのように考えて良いと思います。
>過去には、BOM無しでそのまま
>excelファイルの文字化けが無かったのかもしれませんね。
excelが扱えるファイルの文字コードは、最初はシフトJISだけでしたが、これは当然BOM無しです。
その後で、UTFコードが採用されるようになると、UTFコードにも何種類かあるので、
それらを区別できるようにするため、マイクロソフト独自の仕様(だと思いますが)で、
BOMをつけるようになりました。
UTF-8
UTF-16
UTF-32
等を区別するためです。
一方、rubyとかpythonとかの作者は、マイクロソフトとは関係ないので、
UTF-8をサポートするがデフォルトとしてBOM無しのファイルを扱うようにしています。
No.13
- 回答日時:
>実行結果の内容のエラーメッセージは、
>C:/STUDY/data_replacement_after.rb:7:in `read': No such file or dir・・・途中省略・・・
と出てきました。これで合っていますでしょうか?
はい、あってます。
No.12
- 回答日時:
>サンプルプログラムをダウンロードをしたので、そのフォルダーの中には、この課題に該当するルビーファイルと、一緒のフォルダーにinputdata.csvがあるのですが。
それでも、コピーする必要はあるのでしょうか?いえ、それならコピーする必要はありません。
No.11
- 回答日時:
>inputdata.csvは、保存時に、ルビーファイルと同じフォルダーに保存すると思うのですが。
コピーする必要性について教えていただけると幸いです。「保存時に」という言葉から判断すると、あなたがinputdata.csvをエディタで作成し保存したと読み取れます。
この課題の作者は「inputdata.csvをエディタでデータを入力して作成しなさい」とはいってないと思います。どこかのフォルダ内にinputdata.csvがあるので、それをコピーして使いなさい、と言っていると思うのですが。
もちろん、コピーしないで、自分で作成しても構いません。
ただ、コピーして使ったほうが、手間がかからないので楽でしょうということです。
No.10
- 回答日時:
>outputdata.csvのファイルをダブルクリックして内容を確認しました。
一旦、UTF-8対応のエディタでoutputdata.csvの内容を確認したのち、
UTF-8のBOM付きで、保存してみてください。
そうすると、ダブルクリックしてexeclで表示したとき文字化けしません。
excelに読み込ませる場合は、BOM付きでないと正常に表示されないですね。
No.9
- 回答日時:
>コピーをしない場合の例を挙げてくれても良いです。
C:\test のフォルダで試験をする場合、
①C:\test の下に data_replacement3.rb を作成します。
②どこかのフォルダからinputdata.csvをコピーして、C:\test の下に格納します。
③コマンドプロンプトを開きます。
④cd コマンドでC:\testに移動します。
⑤ruby data_replacement3.rb inputdata.csv outputdata.csv を実行します。
上記の作業で②の処理を行っていないと、inputdata.csvがないため、エラーになります。
⑤のコマンドを実行する前に dirと入力して、ファイル一覧を表示してください。もし、inputdata.csvがあるなら、それを削除してください。
そして、もう一度、dirと入力してinputdata.csvが表示されないことを確認してください。
そして、⑤のコマンドを実行してください。下記のようなエラーメッセージが表示されるはずです。
No such file or directory @ rb_sysopen - inputdata.csv (Errno::ENOENT)
No.8
- 回答日時:
拡張子がcsv以外であれば、excelのアイコンにならないということですよね?とすると、今回の質問では、拡張子が、csvにするから、今回は、仕方が無いという事で、そう解釈してもよろしいでしょうか?
はい、そう解釈して構いません。
但し、関連付けをするかしないかは、あなたの好みなので、
excelのアイコンを表示したくないなら、関連付けを解除してください。
その方法の詳細は私も忘れましたので、ここに提示はできませんが
"windows11 拡張子 関連付け" で検索すれば出てきますので、それを見て解除してください。
>これについては、直接、Cドライブのフォルダーにアクセスして、outputdata.csvのファイルをダブルクリックして内容を確認しました。
メモ帳かUTF-8が表示可能なエディタで開いてください。
ダブルクリックすると、excelで開くので、文字化けします。
No.7
- 回答日時:
>nputdata.csvがないとエラーになるので、コピーしてくださいについてですが、コピーして
>inputdata.csvを作成したのは、もし、inputdata.csvのファイルに何らかの事があった時の為と言う事が言いたいのでしょうか?
>つまり、万が一の時の事だから、別にコピーしなくても、大丈夫と言うことでしょうか?
いいえ、違います。
ruby data_replacement3.rb inputdata.csv outputdata.csv
と入力したとき、
コピーをしていないと、 inputdata.csv が、そのフォルダ上にないため、
スクリプト実行時にエラーになります。
そのため、コピーをしてから実行しなさいということです。
コピーをすれば、inputdata.csv が、そのフォルダ上にあるため、エラーにはなりません。
outputdata.csvは、出力用なのでなくてもエラーになりません。
No.6
- 回答日時:
>それと、inputdata.csvのファイルをコピーをして下さいと書かれているのはなぜでしょうか?
想像ですが、inputdata.csvが、
ruby data_replacement3.rb inputdata.csv outputdata.csv
とコマンドを打った時、そのフォルダ上に、inputdata.csvがないとエラーになるので、コピーしてくださいと書かれているのかと思います。
No.5
- 回答日時:
>inputdata.csvと、outputdata.csvが勝手にエクセルのファイルになり、
エクスプローラでファイルを表示したとき、excelのアイコンが表示される問意味でしょうか。そうであれば、拡張子(csv)をエクセルに関連付けているためです。関連付けを外せば、excelのアイコンは表示されなくなります。
もし、違う意味でしたら、補足してください。
>outputdata.csvの内容を確認すると、やはり、内容が文字化けしていました。
inputdata.csvは、間違いなくutf-8(BOM無し)で保存しましたか。
又、outputdata.csvの内容をどのようにして確認されたのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL 【MySQL】本当に困っているので、助けてください。よろしくお願いします。 3 2023/06/03 14:24
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Excel(エクセル) Excelマクロの差分抽出のコードを教えていただきたいです。 2 2023/03/14 11:40
- その他(データベース) 20万行あるデータを動かしたい 2 2023/06/13 15:21
- PHP ファイルの書き込みについて教えて下さい。 1 2023/03/20 12:01
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) Windows 11 Pro での、VBAのCode書き換えで、1点お教え願います。 2 2023/10/11 01:12
- Visual Basic(VBA) Excel VBAにて、2GB超の点群データ(CSVファイル,改行コードLF)を高速で解析したい。 2 2023/10/07 11:01
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
このQ&Aを見た人はこんなQ&Aも見ています
-
Ruby newメソッド
Ruby
-
ルビー言語 ライブラリー
Ruby
-
Ruby 引数
Ruby
-
-
4
ruby loopメソッド 変数
Ruby
-
5
ruby loopメソッド 変数(再喝)
Ruby
-
6
HTML &CSSとHTML5&CSS3 違い
HTML・CSS
-
7
Ruby 格納
Ruby
-
8
ルビー言語 ライブラリー
Ruby
-
9
ruby クラス・オブジェクト・インスタンス
Ruby
-
10
ルビー言語 ライブラリー(再々渇)
Ruby
-
11
プログラミング言語のバージョン確認について。
その他(プログラミング・Web制作)
-
12
ruby while式
Ruby
-
13
ruby 配列
Ruby
-
14
Ruby require ライブラリー
Ruby
-
15
アセンブリ言語について。
その他(プログラミング・Web制作)
-
16
Ruby 変数 用途と違い
Ruby
-
17
趣味がプログラミングだと言ってもいい?
その他(プログラミング・Web制作)
-
18
ルビー言語 ライブラリー 追記
Ruby
-
19
Python 3.12.2 か一番最新のパイソンでしょうか? 2025年4月3日現在。 ChatGP
その他(プログラミング・Web制作)
-
20
ruby raise句
Ruby
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ruby 配列
-
Ruby require ライブラリー
-
ruby OpenURI::Meta
-
ruby loopメソッド 変数(再喝)
-
ruby loopメソッド 変数
-
ビーリアルのユーザー名を変え...
-
英数字を含む文字列(0-9,A-Z)...
-
C言語の入力した文字を反転させ...
-
(再質問)エクセルのマクロボ...
-
ruby while式
-
ruby クラス・オブジェクト・イ...
-
1、Rstudioで回帰直線を求める...
-
rubyでじゃんけんのプログラム...
-
実行時エラー450:引数の数が一...
-
【VBA】複数シートのデータを1...
-
c言語でランタイムエラーの処理...
-
ルビー言語 ライブラリー 追記
-
ruby raise句
-
ruby begin句
-
ruby ensure句
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Ruby require ライブラリー
-
(再質問)エクセルのマクロボ...
-
ruby loopメソッド 変数(再喝)
-
ruby loopメソッド 変数
-
ルビー言語 ライブラリー(再々...
-
ruby while式
-
ルビー言語 ライブラリー 追記
-
ビーリアルのユーザー名を変え...
-
ruby OpenURI::Meta
-
ruby クラス・オブジェクト・イ...
-
ruby begin句
-
ruby raise句
-
ruby ensure句
-
ruby 配列
-
ルビー言語 csvファイル part2
-
ルビー言語 csvファイル 続き(...
-
ルビー言語 csvファイル 続き
-
ルビー言語 ライブラリー
-
パソコンのスクリーンセーバー...
-
ルビー言語 ライブラリー
おすすめ情報
取り敢えず、あなたが使用されているrubyのバージョンは何でしょうでしょうか。
又、提示されたスクリプトを実行するために、
どのようなコマンドを実行されたのでしょうか。について、の返事を返すという事でいいでしょうか?
ルビー言語のバージョンは、
ruby 3.3.4 (2024-07-09 revision be1089c8ec) [x64-mingw-ucrt]
です。
それでコマンドは、本に載っているプログラムで、サンプルファイルがあるので、part1でのコマンドでは、data_replacement_before.rb inputdata.csvですが、実際書籍には、ruby -Ku data_replacement.rb inputdata.csvで、part2のコマンドでは、data_replacement_after.rb inputdata.csv outputdata.csvですが、これも、同様の書籍には、ruby -Ku data_replacement3.rb inputdata.csv outputdata.csvとなっています。教えていただけると幸いです。
早速、実行した結果、サンプルファイルと同じような結果になりました。メモ帳で、保存した
inputdata.csvと、outputdata.csvが勝手にエクセルのファイルになり、outputdata.csvの内容を確認すると、やはり、内容が文字化けしていました。サンプルファイルと同じです。これで、いいのでしょうか?教えていただけると幸いです。
それと、inputdata.csvのファイルをコピーをして下さいと書かれているのはなぜでしょうか?気にしなくても良いのでしょうか?教えていただけると幸いです。
inputdata.csvがないとエラーになるので、コピーしてくださいについてですが、コピーして
inputdata.csvを作成したのは、もし、inputdata.csvのファイルに何らかの事があった時の為と言う事が言いたいのでしょうか?つまり、万が一の時の事だから、別にコピーしなくても、大丈夫と言うことでしょうか?教えていただけると幸いです。
関連付けを外せば、excelのアイコンは表示されなくなります。についてですが、拡張子がcsv以外であれば、excelのアイコンにならないということですよね?とすると、今回の質問では、拡張子が、csvにするから、今回は、仕方が無いという事で、そう解釈してもよろしいでしょうか?
inputdata.csvは、間違いなくutf-8(BOM無し)で保存しましたか。については、
「はい。」です。
又、outputdata.csvの内容をどのようにして確認されたのでしょうか。
これについては、直接、Cドライブのフォルダーにアクセスして、outputdata.csvのファイルをダブルクリックして内容を確認しました。
教えていただけると幸いです。
コピーをしていないと、 inputdata.csv が、そのフォルダ上にないため、
スクリプト実行時にエラーになります。
そのため、コピーをしてから実行しなさいということです。
についてですが、実際inputdata.csvを、コピーしなくても、全然正常に実行できましたが。
そのフォルダー上にないとは、どう言うことでしょうか?inputdata.csvは、保存時に、ルビーファイルと同じフォルダーに保存すると思うのですが。コピーする必要性について教えていただけると幸いです。コピーをしない場合の例を挙げてくれても良いです。
サンプルプログラムをダウンロードをしたので、そのフォルダーの中には、この課題に該当するルビーファイルと、一緒のフォルダーにinputdata.csvがあるのですが。それでも、コピーする必要はあるのでしょうか?教えていただけると幸いです。
ありがとうございました!文字化けの件は、無事解決しました!エラーメッセージもちゃんと出てきました。ちなみに、コマンドプロンプトに実行結果の内容のエラーメッセージは、
C:/STUDY/data_replacement_after.rb:7:in `read': No such file or directory @ rb_sysopen - inputdata.csv (Errno::ENOENT)
from C:/STUDY/data_replacement_after.rb:7:in `replace'
from C:/STUDY/data_replacement_after.rb:35:in `<main>'
と出てきました。これで合っていますでしょうか?
コピーの件については、inputdata.csvのファイルが、どこかに行った時用にまず、コピーしましょうと言うことでしょうか?そうか、一からrubyのプログラムを組みたい人用とかかもでしょうか?ですが、サンプルプログラムをダウンロードした時に、outputdata.csvも、既にあって、それは、文字化けしていましたが。これは、BOM有りになっていなかったからですね。過去には、BOM無しでそのまま
excelファイルの文字化けが無かったのかもしれませんね。教えていただけると幸いです。