数学、電気の勉強始めました!プログラムにも挑戦しています!|ω・)ノ

ねごとめも背景

# ねごとめも

# カウンター

# プロフィール

negotoy

Author:negotoy
電気の勉強始めました!
テキストエディタを使ってプログラミングに挑戦中。
fc2 ブログに公開しているテンプレート等は、自由にカスタマイズして、ご活用ください。
プログラム実行の前に必ずコードの確認をお願いします。

# 最新記事

# カレンダー

06 | 2013/07 | 08
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -

# スポンサードリンク

{ <pre></pre> タグ版のテキストエディタ作成しました }

前回作成した csv ファイルの読み込み, 書き出し[カンマ区切り,タブ区切り]修正(4) を少し修正。
前回の csv クラスは、改行を含むセルや、セル内に区切り記号が存在する場合、
ダブルクォーテーションで囲まれた値を配列に格納。
今回は、シングルクォーテーションで囲まれた値も配列に格納出来るように訂正。
ダブルクォーテーション、シングルクォーテーションで囲まれた値が混在する場合も配列に格納。

出力した csv ファイルを、 OpenOffice に読み込ませてみると、行、列数は同じ結果。
同じ csv ファイルを LibreOffice に読み込ませてみると、行、列数が一致しない場合があった。
セルの終わりに、ダブルクォーテーション、シングルクォーテーションが
連続して出現した場合に、行、列数が一致しない。
セルの値もクォーテーション数が入力数と同じにならない。
確認した範囲では、区切り記号の前に存在するクォーテーションが奇数の場合、セルの終了?
偶数の場合、区切り記号は区切りとして認識されない。(?_?)

OpenOffice では偶数の場合も区切りとして認識される結果だった。

例えば、クォーテーションが 5 つ並んだ場合、セルに表示されるクォーテーションは 2 つ。
この辺りの処理がまだできてない。(-_-;)

■ csvSample.java


import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;
public class csvSample
{
	public static void main(String args[])
	{
		try
		{
			//CSV csvObj=new CSV('\t');// 読み込む csv の区切り記号
			CSV csvObj=new CSV(',');// 読み込む csv の区切り記号
			String[][] data=csvObj.fgetcsv("template.csv","utf-8");//template.csvファイルを utf-8 で読み込み
			csvObj.setDelimiter(',');// 出力する csv の区切り記号の設定
			//System.out.println("rows="+data.length+"        cols="+data[0].length);
			csvObj.write("result.csv","utf-8");//result.csv へ utf-8 で出力
		}
		catch(FileNotFoundException e)
		{
			System.out.println("FileNotFoundException error");
		}
		catch(IOException e)
		{
			System.out.println("IOException error");
		}
	}
}

■ CSV.java


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

class CSV
{
	private char delimiter;
	CSV(char _delimiter)
	{
		delimiter=_delimiter;
	}
	
	public void setDelimiter(char _delimiter)
	{
		delimiter=_delimiter;
	}
	
	final void setData(String[][] data){ csv=null; csv=data; }
	
	final String[][] setData(String[][] data,Integer index)
	{
		String[][] newData=new String[data.length-1][data[0].length];
		System.arraycopy(data,index,newData,0,data.length-1);
		return newData;
	}
	
	final String[][] join(String[][] d1,String[][] d2)
	{
		String[][] data=new String[d1.length+d2.length][d1[0].length];
		System.arraycopy(d1,0,data,0,d1.length);
		System.arraycopy(d2,0,data,d1.length,d2.length);
		return data;
	}
	
	final void write(String fileName,String encode) throws FileNotFoundException, IOException
	{
		try(BufferedWriter output=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName),encode)))
		{
			StringBuffer result=new StringBuffer();
			for(int i=0;i<csv.length;i++)
			{
				for(int j=0;j<csv[i].length;j++)
				{
					String comma="\""+delimiter+"\"";
					String quot=(j==0)?"\"":"";
					if(j==(csv[i].length-1)){ comma="\"\n"; }
					result.append(quot);
					result.append(csv[i][j]);
					result.append(comma);
				}
			}
			output.write(result.toString().trim());
			output.close();
		}
	}

	private String[][] csv;
	final String[][] fgetcsv(String fileName,String encode) throws FileNotFoundException, IOException
	{
		csv=null;
		try(BufferedReader input=new BufferedReader(new InputStreamReader(new FileInputStream(fileName),encode)))
		{
			ArrayList<ArrayList> rows=new ArrayList<>();
			ArrayList<String> cols=new ArrayList<>();
			StringBuffer str=new StringBuffer();
			int colsMax=0;
			boolean group=false;
			int ch;
			char prev=delimiter;
			char quot='"';
			boolean space=false;
			while((ch=input.read())!=-1)
			{
				char _char=(char)ch;
				if(!group)
				{
					if(_char=='\r'){}
					else if(_char=='"'||_char=='\'')
					{
						if(prev==delimiter)
						{
							group=true;
							quot=_char;
						}
						str.append(_char);
						prev=_char;
					}
					else if(_char==delimiter)
					{
						cols.add(str.toString());
						str=new StringBuffer();
						prev=_char;
					}
					else if(_char=='\n')
					{
						cols.add(str.toString());
						rows.add(cols);
						colsMax=(colsMax<cols.size())? cols.size():colsMax;
						cols=new ArrayList<>();
						str=new StringBuffer();
						prev=delimiter;
					}
					else
					{
						str.append(_char);
						prev=_char;
					}
				}
				else
				{
					if(_char=='\r'){}
					else if(_char==delimiter)
					{
						if(str.length()==1)
						{
							str.append(_char);
						}
						else if(prev==quot)
						{
							group=false;
							cols.add(str.toString());
							str=new StringBuffer();
						}
						else
						{
							str.append(_char);
						}
						prev=_char;
						space=false;
					}
					else if(_char=='\n')
					{
						if(str.length()==1)
						{
							str.append(_char);
							prev=_char;
						}
						else if(prev==quot&&!space)
						{
							group=false;
							cols.add(str.toString());
							rows.add(cols);
							colsMax=(colsMax<cols.size())? cols.size():colsMax;
							cols=new ArrayList<>();
							str=new StringBuffer();
							prev=delimiter;
						}
						else
						{
							str.append(_char);
							prev=_char;
						}
					}
					else if(_char==' ')
					{

						str.append(_char);
						space=true;
					}
					else
					{
						str.append(_char);
						prev=_char;
						space=false;
					}
				}
			}
			if(cols.size()!=0||str.length()!=0)
			{
				cols.add(str.toString());
				rows.add(cols);
				colsMax=(colsMax<cols.size())? cols.size():colsMax;
			}
			csv=new String[rows.size()][rows.get(0).size()];
			for(int i=0;i<csv.length;i++)
			{
				for(int j=0;j<csv[i].length;j++)
				{
					String result;
					try{ result=(String)rows.get(i).get(j); }catch(IndexOutOfBoundsException e){ result=""; }
					result=result.replaceAll("^[  \t\n]+|\t|[  \t\n]+$","");
					Pattern p1=Pattern.compile("(?s)^\'.*\'$");
					Matcher m1=p1.matcher(result);
					Pattern p2=Pattern.compile("(?s)^\".*\"$");
					Matcher m2=p2.matcher(result);
					if(m1.matches()||m2.matches())
					{
						result=result.replaceAll("(?s)^[\'|\"]|[\'|\"]$","");
					}
					//System.out.println("["+result+"]");
					csv[i][j]=result;
				}
			}
			input.close();
		}
		return csv;
	}
}

回線 ( CATV )
ルーター ( buffalo BBR-4HG )
OS ( Windows 7 )

数ヶ月前、プロバイダのメンテナンスが行われた。
”記憶” では、それ以降、ネット接続が不安定な状態が続いてる。
症状としては、
1) web サイト閲覧時、画像抜けが起こる場合がある。
2) web サイト読み込み時にエラー画面が表示される場合がある。( 何度か更新すると表示される)
3) web サイトのレイアウトが崩れる場合がある。( css ファイルが読み込まれない )
4) HTML タグの iframe のコンテンツが読み込まれず、エラーが表示される場合がある。
5) 特定の web サイトが閲覧できない。
6) *ソフトのアップデートが出来ない。
* OS, ウイルスソフトのアップデートは問題なし。
flash, ブラウザ, ソフト等のアップデートが出来ない状態。
flash はインストールの途中でエラーが表示されインストールが止まってしまう。
flash は、 flash レスキュー からファイルを落としてアップデート実行。
ブラウザ, ソフトは、update ボタン連打でようやくアップデート出来る感じ。

んで、症状を改善するために試してみたこと。
1) モデムのリセット
2) ルーターのリセット
3) セキュリティーソフトを終了させてインターネットへ接続。
4) セキュリティーソフトをアンインストールした状態でインターネットへ接続。
5) セキュリティーソフトを他社に変えて接続。 ( フルスキャンしてもウィルスなどは検出されず。 )
6) OS の再インストール
7) ブラウザを変えてインターネットへ接続。
以上の事を試しても症状が改善されない。

ルーター、又はモデムの不具合の可能性を疑ってみる。
ルーターは購入から一年も経ってない。
モデムはそれより古い。
って事で、とりあえず、モデムを疑って、プロバイダに問い合わせ。
プロバイダから連絡を受け、モデムの調査。
モデムの不具合との事でモデムを取替。
PC を起動させると、見事に症状が改善されてる!
おぉっ!って、
ルーターが接続されてなく PC とモデムが直結になってる。
あぇ?って感じで、ルーターを接続してみると以前と同じ症状。
その場に立ち会ってないし。。
これって、ルーターの不具合の可能性もあるよねっ!て事で色々試して症状が改善された手順。

Buffalo IP ユーティリティ → 管理画面 → アドバンス → 管理
DNS1(プライマリ), DNS2(セカンダリ),に表示されてる IP アドレスをメモ。

コントロール パネル → ネットワークと共有センター → ローカルエリア接続 → プロパティ
 → インターネットプロトロルバージョン4 → プロパティ → 次の DNS サーバーのアドレスを使う
優先 DNS サーバー, 代替 DNS サーバーへメモした IP アドレスを入力

上記の手順でこれらの症状は改善出来た。
上記の設定についてプロバイダに問い合わせた所、問題はないみたい。詳しくはわからない。('A`)
とりあえず、この設定で様子見。
環境は、それぞれだから、まずは、プロバイダに問い合わせをっ!


# スポンサードリンク