Android Javaでassetsに置いたcsvファイルの読み込み時のエラー
Androidの開発中に謎のエラーが発生したので報告。
状況としては以下のJavaのコードを用いてassetsに置いたcsvファイルを読み込もうとした時に、
何故か一部の行が読み飛ばされたり、配列の長さが勝手に変わったりした。
・hogehoge.csvの中身
このコードを実行すると、
と出力されるはずが、
の様にfire4がたまに読み飛ばされる現象が確認された。
さらに、fire1, fire2が読み込まれないにも関わらず、
System.out.print(temp_arr[1]);
の部分で
java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
が発生した。
原因は全くわからないが、csvファイルを
とした結果、同様の問題は発生しなくなった。
csvファイルの文字コードや改行コードの問題だろうか?
状況としては以下のJavaのコードを用いてassetsに置いたcsvファイルを読み込もうとした時に、
何故か一部の行が読み飛ばされたり、配列の長さが勝手に変わったりした。
try {
String temp_str;
ContentValues values=new ContentValues();
InputStream is = activity.getResources().getAssets().open("hogehoge.csv");
BufferedReader br=new BufferedReader(new InputStreamReader(is));
while ((temp_str = br.readLine()) != null){
System.out.print("----------");
System.out.print("fire1");
String[] temp_arr=temp_str.split(",", -1);
System.out.print("fire2");
System.out.print(temp_arr[0]);
System.out.print("fire3");
System.out.print(temp_arr[1]);
System.out.print("fire4");
}
br.close();
}catch(IOException e){
//error
}
・hogehoge.csvの中身
1,10
2,20
3,30
4,40
...中略...
890,8900
このコードを実行すると、
----------
fire1
fire2
1
fire3
10
fire4
----------
fire1
fire2
2
fire3
20
fire4
----------
fire1
fire2
3
fire3
30
fire4
...
と出力されるはずが、
----------
fire1
fire2
1
fire3
10
fire4
----------
fire1
fire2
2
fire3
20
----------
fire1
fire2
3
fire3
30
fire4
...
の様にfire4がたまに読み飛ばされる現象が確認された。
さらに、fire1, fire2が読み込まれないにも関わらず、
System.out.print(temp_arr[1]);
の部分で
java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
が発生した。
原因は全くわからないが、csvファイルを
1,10,
2,20,
3,30,
4,40,
...中略...
890,8900,
とした結果、同様の問題は発生しなくなった。
csvファイルの文字コードや改行コードの問題だろうか?
Excel VBAでグラフを配列から動的に生成した場合のラベル
Excel VBAでグラフを動的に生成する場合、
Dim x_arr(5) as Double
Dim y_arr(5) as Double
' 適当な値
x_arr(1)=0.5
x_arr(2)=1.1
x_arr(3)=2.3
x_arr(4)=3.7
x_arr(5)=4.5
y_arr(1)=21.3
y_arr(2)=40.5
y_arr(3)=59.2
y_arr(4)=90.3
y_arr(5)=114.3
' 新規系列を追加
Dim series as Series
series = ActiveChart.SeriesCollection.newSeries
series.xValues = x_arr
series.Valus = y_arr
' グラフの種類を散布図に設定
series.ChartType = xlXYScatterLinesNoMarkers
のように変数を代入するのですが、上記のように散布図に設定すると、
ラベルを付けた際にラベルのx値が
0.5, 1.1, ..., 4.5
のような実数ではなく、
1, 1, ..., 5のように丸められた整数で表示されてしまいます。
これに苦しめられたので対処法。
series.ChartType = xlLine
series.ChartType = xlXYScatterLinesNoMarkers
このように散布図に設定する直前にxlLineをかませると丸められなくなります。
duplicateしたChartのSeriesCollectionを参照する際に、一度新しいSeriesを入れて、すぐ消すとまともに動くなど、
ExcelのChart系の関数は一度別の処理を挟まないと何故か動かないことが多くて嫌になりますね。
バグなのか仕様なのか知らないけど。
検索用
dynamic Series.xValues integer decimal .DataLabel.ShowCategoryName
Dim x_arr(5) as Double
Dim y_arr(5) as Double
' 適当な値
x_arr(1)=0.5
x_arr(2)=1.1
x_arr(3)=2.3
x_arr(4)=3.7
x_arr(5)=4.5
y_arr(1)=21.3
y_arr(2)=40.5
y_arr(3)=59.2
y_arr(4)=90.3
y_arr(5)=114.3
' 新規系列を追加
Dim series as Series
series = ActiveChart.SeriesCollection.newSeries
series.xValues = x_arr
series.Valus = y_arr
' グラフの種類を散布図に設定
series.ChartType = xlXYScatterLinesNoMarkers
のように変数を代入するのですが、上記のように散布図に設定すると、
ラベルを付けた際にラベルのx値が
0.5, 1.1, ..., 4.5
のような実数ではなく、
1, 1, ..., 5のように丸められた整数で表示されてしまいます。
これに苦しめられたので対処法。
series.ChartType = xlLine
series.ChartType = xlXYScatterLinesNoMarkers
このように散布図に設定する直前にxlLineをかませると丸められなくなります。
duplicateしたChartのSeriesCollectionを参照する際に、一度新しいSeriesを入れて、すぐ消すとまともに動くなど、
ExcelのChart系の関数は一度別の処理を挟まないと何故か動かないことが多くて嫌になりますね。
バグなのか仕様なのか知らないけど。
検索用
dynamic Series.xValues integer decimal .DataLabel.ShowCategoryName
英語での敬具(手紙の結び)の表現
英語での敬具の表現をまとめます。
イギリス人(学生)の友達とオーストラリア人(どっかの社長)の友達から聞いた用法を書いており、
個人の主観が入っている可能性が高いため、注意してください。
・自分の名前だけ
テキトーな表現、仲の良い相手、友達に。
例:
~~本文~~
[空行]
自分の名前
・Cheers
仲のいい知り合い~友達程度。
オーストラリア人が好んで使っている。
例:
~~本文~~
[空行]
Cheers,
自分の名前
(以下、用法が一緒のため例は省略)
・Regards
簡潔で、多少砕けた表現。
大学生が大学の事務に送る程度ならこれでOK
・Kind regards
あんま使わないから分からん、とのこと
・Best wishes
イギリス人お勧め。
友達から自分のラボの教授くらいまでなら使用可能
汎用性高い
・Yours sincerely
取引先とか知らない人。知ってる人には使わない。イギリス風。
・Sincerely yours
学校で習うやつ。アメリカ英語のため、イギリス人からすると気持ち悪いらしい。
Yours sincerelyと同じように使うが、アメリカ人以外は好まない模様。
・Sincerely
あんまり使わないけど、ある程度の期間連絡を取り合っている取引先とかならこれでOK。
・Yours faithfully
仕事を探す時くらいしか使わない丁寧過ぎる表現。
仕事を探すときでもYours sincerelyでいいんじゃない?とのこと。
・Cordially
超丁寧でキモい。
絶対使わない。
皇族がメールするときや、自分がとっても偉い時のみ。
※他のページを見ると「ややカジュアル」ともある。イマイチ使い勝手が分からないため、自分では絶対に使わない。
以上です。ちなみに、汎用性が高いらしいので、自分では大体Best wishesを使ってます。
イギリス人(学生)の友達とオーストラリア人(どっかの社長)の友達から聞いた用法を書いており、
個人の主観が入っている可能性が高いため、注意してください。
・自分の名前だけ
テキトーな表現、仲の良い相手、友達に。
例:
~~本文~~
[空行]
自分の名前
・Cheers
仲のいい知り合い~友達程度。
オーストラリア人が好んで使っている。
例:
~~本文~~
[空行]
Cheers,
自分の名前
(以下、用法が一緒のため例は省略)
・Regards
簡潔で、多少砕けた表現。
大学生が大学の事務に送る程度ならこれでOK
・Kind regards
あんま使わないから分からん、とのこと
・Best wishes
イギリス人お勧め。
友達から自分のラボの教授くらいまでなら使用可能
汎用性高い
・Yours sincerely
取引先とか知らない人。知ってる人には使わない。イギリス風。
・Sincerely yours
学校で習うやつ。アメリカ英語のため、イギリス人からすると気持ち悪いらしい。
Yours sincerelyと同じように使うが、アメリカ人以外は好まない模様。
・Sincerely
あんまり使わないけど、ある程度の期間連絡を取り合っている取引先とかならこれでOK。
・Yours faithfully
仕事を探す時くらいしか使わない丁寧過ぎる表現。
仕事を探すときでもYours sincerelyでいいんじゃない?とのこと。
・Cordially
超丁寧でキモい。
絶対使わない。
皇族がメールするときや、自分がとっても偉い時のみ。
※他のページを見ると「ややカジュアル」ともある。イマイチ使い勝手が分からないため、自分では絶対に使わない。
以上です。ちなみに、汎用性が高いらしいので、自分では大体Best wishesを使ってます。
AndroidにてESファイルエクスプローラーでファイルを送る
Android端末とPC間でFTPプロトコルでファイルの送受信をする方法です。
同一LANに接続している場合と、PCとAndroid端末のみがある場合の2通りについて説明します。
☆必要なアプリ
ESファイルエクスプローラー
☆手順
・ホットスポットを使って直接ファイルを送る場合
※LANでつながっている(同じ無線LANなどにPCと端末両方が接続している)場合は途中まで飛ばして良い。
1. ESファイルエクスプローラーのメニューから「ネットマネージャ」を選択する。
2. 「接続済みのネットワーク」がある場合は「終了」をタップする。
3. 「ホットスポットを作成」を選択する。
4. 「APを使用中 SSID:***」と表示される。
5. PC側から無線LANの接続(右下に表示されているネットに繋ぐ際にクリックするアイコン)で表示されたSSIDを選択する。
6. これでPCとAndroid端末が直接繋がれている(この間、ネットが使えないので注意)。
7. 後はLANでつながっている場合と同様。
・LANでつながっている場合はここから
1. ESファイルエクスプローラーのメニューから「リモートマネージャ」を開く。
2. アクションバーの「設定アイコン」をタップする。
3. 「管理アカウントをセット」に適当なユーザー名とパスワードを設定する(PCから接続する際に必要になる)。
4. リモートマネージャの画面に戻り、「オンにする」をタップする。
5. 表示された「ftp://***」をPCのエクスプローラのアドレスに入力する。
同一LANに接続している場合と、PCとAndroid端末のみがある場合の2通りについて説明します。
☆必要なアプリ
ESファイルエクスプローラー
☆手順
・ホットスポットを使って直接ファイルを送る場合
※LANでつながっている(同じ無線LANなどにPCと端末両方が接続している)場合は途中まで飛ばして良い。
1. ESファイルエクスプローラーのメニューから「ネットマネージャ」を選択する。
2. 「接続済みのネットワーク」がある場合は「終了」をタップする。
3. 「ホットスポットを作成」を選択する。
4. 「APを使用中 SSID:***」と表示される。
5. PC側から無線LANの接続(右下に表示されているネットに繋ぐ際にクリックするアイコン)で表示されたSSIDを選択する。
6. これでPCとAndroid端末が直接繋がれている(この間、ネットが使えないので注意)。
7. 後はLANでつながっている場合と同様。
・LANでつながっている場合はここから
1. ESファイルエクスプローラーのメニューから「リモートマネージャ」を開く。
2. アクションバーの「設定アイコン」をタップする。
3. 「管理アカウントをセット」に適当なユーザー名とパスワードを設定する(PCから接続する際に必要になる)。
4. リモートマネージャの画面に戻り、「オンにする」をタップする。
5. 表示された「ftp://***」をPCのエクスプローラのアドレスに入力する。