2012年12月22日土曜日

ifstream でテキストファイルを読み込む場合のあれこれ

ファイル名の指定

C++11から,std::stringが直接使えるようになったが,
C++11以前は const char * のみ.

std::string filename("hoge.txt");
std::ifstream f(filename.c_str());

ファイルが正しく開いたかのチェック

bad()ではダメで,fail()を使う.あるいは,!f でもよろしい.
! 演算子は fail と同じ.
http://en.cppreference.com/w/cpp/io/basic_ifstream
しかし,宣言だけしてファイルを開く処理を行っていない場合(うっかり忘れている場合)も fail() は false なので,結局,is_open() ファイルオープンの検査には最良か.


順に,宣言だけ,ファイルあり,ファイルなし

f true,true,false
f.bad() false,false,false
f.fail() false,false,true
f.good() true,true,false
f.is_open() false,true,false



また当然の挙動であるが,

f.eof() false,false,false

たとえ,サイズ0バイトのファイルを開いても,f.eof()はtrueにならない(読み込み処理を一度でも行わないとフラグが立たないと思われる.まあそれはそうだろう).


以下,テスト用のコード:

  std::ifstream f;
  f.open("sample.txt");

  if (f) {
    std::cout << "f" << std::endl;
  }
  if (f.fail()) {
    std::cout << "f.fail" << std::endl;
  }
  if (f.bad()) {
    std::cout << "f.bad" << std::endl;
  }
  if (f.good()) {
    std::cout << "f.good" << std::endl;
  }
  if (f.is_open()) {
    std::cout << "f.is_open" << std::endl;
  }
  if (f.eof()) {
    std::cout << "f.eof" << std::endl;
  }

ファイルから1行 string に読み込む

ifstreamのメンバ関数ではなくて,std::getline を使う.
行末の改行は削除される.

#include <fstream>
#include <string>

std::ifstream f("sample.txt");
std::string s;
std::getline(f, s);


ファイルの終端に達したかチェックする

f.eof()を使ってwhileでくりかえせばよい.
1行ずつ読み込んでから解釈するのであれば,これで十分.

2012年12月14日金曜日

meadow on windows 7

Windows 7 に meadow をインストールする.

環境変数の設定の確認
コントロールパネル > システム > システムの詳細設定 > 環境変数
xxxxx のユーザー環境変数に,
HOME: c:/Users/xxxxx
TZ: JST-9
が設定されていることを確認する.

ダウンロード
http://www.meadowy.org/meadow/dists/3.00/setup-ja.exe
ここから setup-ja.exe をダウンロードする.

インストール
setup-ja.exe をダブルクリックする.

Meadow Netinstall Setup Program: 次へ
ダウンロード元の選択: インターネットからインストールする
インストール先ディレクトリ: C:\meadow
ローカルパッケージディレクトリ: C:\tmp (適当に指定)
インターネットの接続の選択: ダイレクトに接続する (環境によりけり)
ダウンロードサイトの選択: ftp://ftp.ring.gr.jp
パッケージの選択:
Utils > yatex を選択: Skip→1.72zq-1

インストールが開始される.

ImageMagickのセットアップが始まる.

Welcome to the ...: Next
License Agreement: I accept the agreement
Information: Next
Select Destination Location: デフォルトのままでよい
Select Start Menu Folder: デフォルトのままでよい
Select Additional Tasks: デフォルトのままでよい
Ready to Install: Install

インストールがなされる.

Information: Next
Completing the ...: Finish

Meadow のインストールウィンドウに戻る.
Create Icons: install.exe を実行する にチェックを入れて,完了

C:\meadow\install.exe が実行される.
(チェックを入れずにインストーラを終了した場合は,C:\meadow\install.exeを
直接実行する)
環境変数 HOME が正しく設定されていれば,.emacs を読み込むディレクトリと
して C:/Users/xxxxx が候補となっているはずなので,enter を押して実行.
デスクトップに Meadow 3 のアイコンが表示される.

.emacs の設定

C:\meadow\dot.emacs.ja を C:\Users\xxxxx にコピーする.
エクスプローラでは .emacs にリネームできないので,meadow で dot.emacs.ja を開いて .emacs として保存する.

.tex をダブルクリックすると meadow が起動するように設定する
このファイルを開けません: インストールされたプログラムの一覧からプログラムを選択する
ファイルを開くプログラムの選択: 右下の「参照」をクリック
プログラムから開く...: C:\meadow\bin\RunWM32.exe を選択

2012年12月13日木曜日

skk

sudo apt-get install ddskk dbskkd-cdb
sudo /etc/init.d/openbsed-inetd restart

最低限の emacs の設定
(require 'skk-autoloads)
(setq skk-server-host "127.0.0.1")
(setq skk-server-portnum "1178")

sudo apt-get install uim uim-skk
im-switch -c

module_path にはテーマ・エンジンがありません

module_path にはテーマ・エンジンがありません
と言われる場合は
sudo apt-get install gtk2-engines-pixbuf

linux フォント

~/.fonts に .ttf ファイルを置けばよろしい.
fc-list で使用可能なフォントの一覧が出力される.

linux ライブラリ

ldconfig -p で現在システムが認識しているライブラリのリストが出る.
/etc/ld.so.conf.d/ の中の *.conf にライブラリが存在しているディレクトリを記述.
ldd 実行ファイル でその実行ファイルが実行時にリンクするライブラリの一覧が出る.

ubuntu 11.10 + CUDA 5.0

xubuntu 13.10 + CUDA 5.5のエントリが最新です。

----

CUDA 5.0 は ubuntu 11.10 推奨.
https://developer.nvidia.com/cuda-downloads
ASUS P8Z68 DELUXE/GEN3 で 12.10 が動かない現象あり.何度か挑戦して,あきらめる.
http://www.ubuntulinux.jp/download/ja-remix
32ビットでも PAE(Physical Address Extension) により4GB以上のメモリを使用できる.

まずドライバを入れる.

sudo apt-get update
sudo apt-get upgrade
Ctrl+Alt+F1 でコンソールが表示されない.
カーネルパラメータに nomodeset を渡すように設定を変更.
/boot/grub/grub.cfg の linux のエントリの末尾に nomodeset と記述.

ソースが必要
sudo apt-get install linux-source

nouveau を無効化する.コンソール画面で行う.
sudo stop lightdm
sudo apt-get --purge remove nvidia-common
sudo apt-get --purge remove nvidia-current
sudo apt-get --purge remove nvidia-settings
sudo apt-cache search nvidia など実行してインストールされている nvidia 関係のパッケージを確認するべし.

/etc/modprobe.d/blacklist.conf に以下を追加する.
blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist nvidiafb
blacklist rivatv
コンソールから
sudo sh NVIDIA...
これでうまくいくはず.


次に CUDA 5.0 のインストール
長い license terms and conditions は Ctrl-C でキャンセルできる.
sudo apt-get install freeglut3

sudo apt-get install build-essential freeglut3-dev libxmu-dev libxi-dev
1行目は不要かもしれない.

このままだと,libglut.so が無い,と言われるので,シンボリックリンク.
sudo ln -s /usr/lib/libglut.so.3 /usr/lib/libglut.so
sudo ldconfig

CUDA 関連実行ファイルにパスを通す.
~/.profile に
PATH="/usr/local/cuda-5.0/bin:$PATH"

ダイナミックリンクライブラリがあるディレクトリを教える.
/etc/ld.so.conf.d/cuda.conf を作成し,
/usr/local/cuda-5.0/lib
を記述する.

参考にした主なサイト: