(編集中)

このページについて


コンテンツ

UTF16でエンコードされたファイルを読み取る

ネットで探してもなかなか見つからず、試行錯誤の結果なんとかできたことについての覚書である。

ハッシュの使い方

複数の配列を同時に扱う

CSVファイルの内容をエクセルに追加する

XMLの形式を内部で扱う

  • DOMを使用する。検索キーワードは「ruby xml dom」で調査中。CVSのヘッダ行をタグ名として扱い、各要素をXMLのノードとして生成してくれるライブラリがあると嬉しいのだが…。
  • ノードの作成中に遭遇したエラー

CSVファイルを読み込む

読み込みに関して、ネットで色々調査して分かったことを書き留める。
  • 1.8系では、標準でCSVクラスが用意されているのでそれを使えばいいこと。パースの速さを求める場合はFasterCSVを使う方法もある
  • 1.9系では、FasterCSVを元にしたライブラリが標準として採用されている。従来通りCSVクラスで処理可能
  • FasterCSVよりもパースが高速であることを謳っているライブラリがここにある。
    • 詳細な調査をおこなっていないので分からないが、1.9系のCSV解析は高速化されているかもしれない
    • 個人的にメリットを感じているのは、…,"…\n…",…のようにダブルクオーテーション内の改行があっても読み込み時の区切りとして扱われないところ
    • デメリットは標準CSVと同様のメソッドが提供されていないこと。具体的にはforeachのみの実装のため、使用する際は注意を要する。その点は作者本人もコメントとして残している。
    • メリットがデメリットを圧倒しているため、自分が必要としているメソッドを追加することを検討中

Windows環境で文字列を扱う

  • 文字コードの件を何回か調べているような気がしてきた。入出力およびスクリプト内部で扱う文字コードをUTF8やShiftJISなどに統一したほうがいいのだろう。そうすればひな形にもなる

秀丸エディタ

  • これでRubyをプログラミングする場合は、予約語が強調表示されてほしいので、強調表示を導入

メモ

1.8系でも1.9系でも動くコードを書くべき

ざっくりした指針は
  • 基本は共通のコード
  • だめなら、スクリプト内でバージョンごとの実装

requireでエラー

ここで回答されているように、1.9系と1.8系で指定の仕方が異なる。1.9系ではスクリプトと同じ階層にある場合は./をつけるように変わったようだ。

selfでエラー

詳細は調査していないので不明だが、インスタンス変数にアクセスする際にself.インスタンス変数と入力すると、エラーとなる。selfを付けないとエラーとはならない

Stringクラス関連

ヌル文字列
ヌル文字列に対してstrip!メソッドを呼ぶと、
undefined method `strip' for nil:NilClass (NoMethodError)
が表示される。リファレンスにはそういった例がないので注意。
今回はCSVファイルの処理中、カンマで終わっている行をCSV::Readerで読み込み、ホワイトスペースを取り除くためstrip実行中に発生した事象
1.9系でのマルチバイト文字
invalid multibyte charというエラーが出る。
回避方法というか対処法はいくつかあり、コマンドラインオプションで -Ksを指定する。

ファイルパスを指定する場合

  • 文字列で指定する場合が多いだろう。その際はダブルクオーテーションではなくシングルクォーテーションのどちらがいいのか。OLEで使う場合はシングルクォーテーションで囲んだほうがいい気がする。当たり前すぎ?

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

管理人/副管理人のみ編集できます