ログイン  |  RSS  |  情報

 

【C#】ファイル書き込みをShift_JISで行う。2008年12月31日 15時34分

C#のstring型は内部的にUnicodeで値を持っているみたいなので、文字列をのまま書き込んでしまうとファイルにはUnicodeとかで書き込む事になります。Shift_JISとかで書き込む際には、ちょっとした指定が要るみたいです。

1:	public stdStreamIO(Encoding encode)
2:	{
3:		// 文字コード指定
4:		ec = encode;
5:	}
6:
7:	public int writingFile(string fpath, string str)
8:	{
9:		// 宣言
10:		int ret = -1;
11:		FileStream fs;
12:		StreamWriter sw;
13:
14:		try
15:		{
16:			// 初期化
17:			fs = new FileStream(fpath, FileMode.Create);
18:			sw = new StreamWriter(fs, ec);
19:
20:			// 書き込み
21:			sw.WriteLine(str);
22:			sw.Flush();
23:
24:			// 後処理
25:			sw.Close();
26:			fs.Close();
27:
28:			// 戻り値
29:			ret = 0;
30:		}
31:		catch (Exception e)
32:		{
33:			Console.WriteLine(e.StackTrace);
34:		}
35:
36:		return ret;
37:	}

Shift_JISコードを使うなら引数を渡す時に、Encoding.GetEncoding(932)を指定すると良いみたいです。書き込むだけなら18行目のecのところを変えるだけでも行けそうですけどね。

ただShift_JISに書き込んだ後、再び開いて編集→書き込みとかする時は色々注意が必要そうです。最初一連の流れでそれやってたら、日本語のところだけが文字化けしてて、解決するまでに3日も費やしてしまいました。

このコードで本当に正しいかどうかという問題は不明。とりあえず、他テキストエディタで見るとShift_JISに変換されている、というだけですし。最初はbyte[]型に文字列を格納してって、試行錯誤してましたが。その面倒な変換は、StreamWriterが変わりに行ってくれた……のかな。

【C#】ファイルの中身を空にしたい。2008年12月24日 21時47分

PSPでローカルwebを楽しもうツールなのですが、xhtmlを扱うためのクラスを作成して、XML1.0でのxhtml雛形を作るところまでは概ね出来ました。でも、こっから難題。ファイルの中身を置き換える時にどうするかなんですよねー。タイトルタグの中身だけを変えたい場合とか。

ファイルを開きっぱなしにしたまま、一旦中身だけを取り消す方法とか無いんですかねー……このままだと重大なバグがあるままです。Cではどうしたっけとか考えたら、Cでファイルをどうこうする時って、write(書き込み)モードで開いてたから意識しなかったわ。同じようにすれば問題解決は出来るのだけれど、ファイルを開きっぱなしにしたまま中身だけを空にする方法があればスマートになるんじゃないかとも思ったり。

もうちょっと試行錯誤してみる。

PSPを便利に使いたいので。2008年12月20日 23時34分

PSPにローカルに保存したwebページが見れる&多少のJavaScriptは動くということで、自分用にC#でローカルwebページ支援用ツールを作ろうと画策中。

ただ僕って元々html+cssからCプログラミングな人なので、そもそもオブジェクト指向の概念がいまいち分からん。部品化して云々という情報処理試験に使えそうな「実感のないテキスト知識」ならあるけど、それがどうして効率が良いのかという根本的な意味が分かってない。習うより慣れろってことで、暫く使ったら分かるようになるかもしんないとか考えて居るんだけど。

一応Javaもちょっとだけ遊んだ事はありますが、その時って本当に基本構文ぐらいしかやらなくて、使えるというにはおこがましい感じ。

それはともかく。挑戦ってことで、C#で自分用の支援ツールを作り始めた訳だけど、型とかクラスとかが、いまいち分からない。例えば真偽を扱うブール型を使いたいのに、Bool型とBoolean型がある。説明も同じっぽい。どっちを使えば良いのよ。FileクラスとFileInfoクラスも同じ。むしろどう違いますか。……newしなくても使えるか使えないだけの差でしょうか。

ファイルの削除(VB6)。2008年01月12日 06時07分

VB6でファイルを削除する時はKillが使える。使い方は「Kill (name)」でOK。試しにダイアログボックスも何も書かずに書いてみたら、本当にすんなり消えた。

使う時はdir関数辺りで「ファイルが存在するかどうか」を調べた後、MsgBox関数で「削除しても良いかどうか」を尋ねた方が無難かな。

あとVB6ヘルプでFileSystemObjectを使う方法というのが載ってたけど……これIE5以降に付いてるコンポーネントを参照しないと使えないみたい?  ちょうど実験してた時、ネットに繋げない状況だったから確実に試してはいないんだけど、ネット上の手引きサイト見ると、そういう説明の仕方が書いてあります。と言うか、そのままでは使えなかったんだから、ヘルプにもなんか書いておいて欲しいです。

JavaScriptを頑張ろうかなぁ。2007年11月10日 15時17分

少し前にJavaScriptの基本を覚えたんですけど、やっぱり普通に使うには力用不足が目立つなって思います。これ、簡単にそこら辺のソースが読めちゃうんですが、読んでも殆ど意味不明な事が多いです。自分の知らない単語が多すぎるというか、流れだけは分かるんだけど機能がまったく分からない状態です。

GreaseMonkeyとかAjaxとか、色々活用出来る土台は揃っているので、覚えたら、もっと便利になるだろうなぁってのも最近思うんですよね。

しかし──これ、何回挫折を覚えたか分からないなぁ;
今までも何度か挑戦して挫折してを繰り返して、ようやく基本中の基本だけは覚えたのに、これより上に行くとなると何回挫折すれば良いのやらって感じです。挫折せずに頑張れって話でもありますけれどねー。

バージョンが古くないとダメらしい(VB6)。2007年11月05日 17時57分

VB6でDBを扱ってみようかと思ったら予想以上に大変だった。と言うか初期状態で接続できるDB先が少なすぎる。ついでにVB6が出たのが古いせいか色々と制約がある模様。

試しにACCESSで頑張ったら、ACCESS97形式じゃないと読み込んでくれないみたい。MS社の情報にSP3以上ならば2000形式も読み込めるみたいなこと書いてあったけど、それ以上はどうなんでしょうね。そこまでは探さなかったです。

本当に、今更VB6で頑張るより、.NET以降を使った方が色々と便利そうです。なんで、それが分からないのかなぁ。

やっぱりPCごとに違うんだ(VB6)。2007年11月03日 19時13分

VB6を自宅の新しいPCで頑張ってたら、ふと気付きました。今までやってたPCと表示が違う。具体的に言えば、ラベルの枠内に入っていた文字が、枠内に収まりきれず2行になってしまっている。

やっぱり環境ごとに違うんだなぁ、と実感。
そもそもVB6も今更感があるんですよねー。なんでわざわざテキスト読んで、同じプログラム組まなきゃいけないの。テキスト自体が──なんていうかラフな作り方しているので、あんまり参考にならないような気がします。

小まとめ記事(Java/VBA)2007年11月02日 13時41分

JavaのボタンなどでDispose()すると、WindowListenerの閉じるボタンを押した時の動作には行かない……っぽい。

VBAなどでシートのセルに入れる時は、Sheet1.cells(x,y)で可能。xとyは1以上の数値を使う。

Excelの関数を使いたい時はWorksheetFunction.rept()など。単体のセルのみを太字にしたい時は、Sheet1.cells(x,y).font.bold = trueで可能となる。

RSS