2018年3月18日日曜日

Where my money at ?

 珍しく東京で電車に乗った時のことですが、小学校5,6年生と思しき子供が本を読んでいるのを見かけました。読んでいた本は、「ピーター・リンチの株で勝つ」。
 昨今は、子供も投資を考える時代みたいです。

 (私はこの本を読んでいないので、詳しくは知りませんが。)

 政府は投資を推奨しているみたいです。少額投資非課税制度 (NISA) や、確定拠出型年金 (Idecoなど) が色々なところで宣伝されています。
 (正直なところ、確定拠出年金のように、半ば強制的に投資させられるのは、いい気分ではないです。)

 みんなが投資すれば、市場にお金が供給されて、物価上昇率2%の目標も達成できるでしょう。
 ワー、スバラシー (棒読み)。

 投資は重要な経済活動です。投資で資金が集まる産業は発展します。つまり、将来的に発展させたい産業に投資が行われるようにすべきです。
 どの産業を発展させるかの選択は、非常に難しい問題です。政治的な意図も絡んできます。将来を左右する問題である以上、あまり安易に投資を推奨されるのには違和感を覚えます。

 ただ株価の数字だけ見て利益を追及するのはマネーゲームです。「利益のためなら、どんな犯罪組織に投資してもOK」ということになってしまいます。
 残念ながら、将来の社会を見据えた投資と、ただのマネーゲームとの区別は難しいです。

 
 政府が推奨しているのだから、これからは投資が盛んに行われる社会になるのかもしれません。
 私の希望としては、「パソコンに向かっているだけのトレーダー」が得をして、「汗を流して働いている労働者」が損をする、そんな社会にはなって欲しくないです。



 余談ですが、今回のタイトルは、Wyclef Jeanの"Sweetest Girl"という曲からとりました。"~work for the president"ってところの歌詞が面白いです。


C#でファイルサイズのリストを作ろう

 パソコンのHDDの空き容量が少なくなってきたので、いらないファイルがないか調べてみることにしました。

 コマンドプロンプトで、
    dir /s /-c > filelist.txt
と入力して実行します。すると、filelist.txtには、現在のディレクトリの下にある全てのファイルとディレクトリが出力されます。"/s"は下の階層まで表示するオプションで、"/-c"はファイルサイズの数字にカンマを入れないというオプションです。

 これを、Cドライブの直下でやると、Cドライブにある全てのファイルとディレクトリが出力されます。処理に1分くらいかかるかもしれません。私の場合、出力結果は30MByteくらいになりました。

 これでファイルサイズのリスト自体はできるのですが、余計な文字列があるため分かりにくいです。というわけで、C#でファイルサイズとファイル名だけ抽出するプログラムを作ってみました。ソースコードを下の方に載せておきます。空白行とかを無視して、必要な情報を抜き取っているだけです。

 もちろんExcel VBAとかで作ることもできます。そもそも、ファイルサイズのリストを作るフリーソフトは多数あるので、わざわざプログラムを書く必要はありません。敢えてプログラムを自分で書いているのは、ただの趣味です。

 で、抽出結果をExcelで読み込んで調べてみたところ、"cab_*"という0~100MByteのファイルが1000個以上ありました。
 「なんじゃこりゃ?」と思って、Google先生に聞いてみたら、どうもいらないファイルらしいです(参考)。

 早速、"cab_*"ファイルを削除したら、空き容量が50GByteくらい増えました。

 これにて一件落着。めでたし、めでたし。勉強になりました。




using System;
using System.IO;
using System.Text;

public class Program
{
public static void Main( string[] args)
{
if( args.Length == 0)
{
return;
}

string readfile = args[0];
string writefile = readfile + ".parse.csv";

try
{
using( StreamReader sr = new StreamReader( readfile, Encoding.GetEncoding( "shift_jis")))
{
using( StreamWriter sw = new StreamWriter( writefile, false, Encoding.GetEncoding( "shift_jis")))
{
ParseDir( sr, sw);
}
}
}
catch( System.Exception err)
{
Console.WriteLine( err.Message);
}
}

private static void ParseDir( StreamReader sr, StreamWriter sw)
{
string str;

str = sr.ReadLine();
str = sr.ReadLine();

while( !sr.EndOfStream)
{
str = sr.ReadLine();

if( str.Length == 0)
{
continue;
}

if( str[0] != ' ' && str.IndexOf( "<") == -1)
{
sw.Write( Convert.ToInt64( str.Substring( 19, 16)));
sw.Write( ", ");
sw.Write( "\"" + str.Substring( 36, str.Length - 36) + "\"");
sw.WriteLine();
}
}
}
}