SQLの窓

2015年09月04日


Java : テキストファイルを読み込んで正規表現で置換

テキストファイルの一括読み込みが必要でしたが、結局一行づつ読み込んで結合するのがオーソドックスのようです。正規表現は、パターンが解っておれば、他の言語より解りやすいと思いました。
( ここでは、簡易的に String を結合していますが、本来は StringBufferStringBuilder を使用します )

パターンの意味

"max_execution_time\s*=\s*[^\n]*?\n"

max_execution_time で始まって、0個以上空白文字の次に = があって、その
次に0個以上空白文字があって、さらに改行以外の文字が0個以上あって改行で
終わる。
※ \s は空白文字です。その後に * が続くので、 \s* で0個以上の空白文字です

[^\n]*? の ? は一番短い一致ですが、この場合省略してもOKです。
[^\n]* が改行以外なので、かならず最短になります。

max_execution_time\s*=\s*\d+ を使うと、行の最後までを判断せずに
必要な部分のみを置換する事ができます
※ ここでは、(\d+) としてサブマッチで使っています
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class Main {

	public static void main(String[] args) {
		Main thisClass = new Main();
		thisClass.testAction();
	}

	// メソッド
	void testAction() {
		MyTool out = new MyTool(">>>");
		out.println("処理開始");

		String textData = "";
		
		try {
			// 生のバイトのストリーム
			FileInputStream fis = new FileInputStream( "c:\\php\\php.ini" );
			// SHIFT_JIS として読み込む為の準備
			InputStreamReader isr = new InputStreamReader(fis, "Windows-31j");
			// 行単位で読み込む為の準備
			BufferedReader br = new BufferedReader(isr);
		
			String line_buffer = "";
			// BufferedReader は、readLine が null を返すと読み込み終了
			while ( null != (line_buffer = br.readLine() ) ) {
				textData += line_buffer + "\n";
			}
		
			// 閉じる
			br.close();
			isr.close();
			fis.close();
		}
		catch( Exception e ) {
			textData = e.toString();
		}
		
		// 置換対象の内容確認
		out.printlnTarget(textData);

		// その文字列のみの置換
		// ( = の前後に一つのスペースが入っていないと置換できません )
		String textData1 = textData.replace("max_execution_time = 30", "max_execution_time = 90");
		// 置換結果の確認
		out.printlnTarget(textData1);

		// その文字列と、行の終わりまでの置換
		Pattern regPat = Pattern.compile("max_execution_time\\s*=\\s*[^\\n]*?\\n");
		Matcher regMat = regPat.matcher(textData);
		String textData2 = regMat.replaceAll("max_execution_time = 90\n");
		// 置換結果の確認
		out.printlnTarget(textData2);

		out.println("処理終了");
	}

	// *****************************************************
	// 内部用クラス
	// *****************************************************
	class MyTool {

		private String mark = null;

		// コンストラクタ
		MyTool(String pm) {
			mark = pm;
		}

		public void println(String str) {
			System.out.println( this.mark + str );
		}
		
		public void printlnTarget(String text) {
			Pattern regPat = Pattern.compile("max_execution_time\\s*=\\s*(\\d+)");
			Matcher regMat = regPat.matcher(text);

			println( "サブマッチ数 : " + regMat.groupCount()+"" );
			// find を実行しないと、サブマッチを取得できない
			if (regMat.find()) {
				println( regMat.group(0) ); // マッチ全体
				println( regMat.group(1) );	// ここが数字部分
			}
			System.out.println();
			
		}

	}	
	
}



タグ:java 正規表現
posted by lightbox at 2015-09-04 02:57 | java : テキストファイル | このブログの読者になる | 更新情報をチェックする

2009年09月28日


Java : iniファイルの読み取り

文字列処理のサンプルです。
Tomcat6.0 のサンプルに同梱しました( webapp\sample_basic\local_func.jsp )
実際は、セクションの処理やコメント行の処理が必要です( その他、同名エントリの処理等 )


// *********************************************************
// PHP.INI のエントリの値( 1 )
// ※ StringTokenizer
// コメントを考慮していません( ; )
// 行解析の前に;を含む右側の文字列を取り去る必要があります
// *********************************************************
public String getPhpIni_1( String Entry ) {

	String ret = "";

	try {
		// 生のバイトのストリーム
		FileInputStream fis = new FileInputStream("c:\\php\\php.ini");
		// SHIFT_JIS として読み込む為の準備
		InputStreamReader isr = new InputStreamReader(fis, "SJIS");
		// 行単位で読み込む為の準備
		BufferedReader br = new BufferedReader(isr);

		String line_buffer = "";
		// BufferedReader は、readLine が null を返すと読み込み終了
		String str = "";
		while ( null != (line_buffer = br.readLine() ) ) {
			StringTokenizer st = new StringTokenizer(line_buffer,"=",false);
			//トークンの出力
			while(st.hasMoreTokens()) {
				str = st.nextToken();
				str = str.trim();
				if(str.equalsIgnoreCase( Entry )){
					ret = st.nextToken();
					ret = ret.trim();
				}
			}
		}

		// 閉じる
		br.close();
		isr.close();
		fis.close();
	}
	catch( Exception e ) {
		ret = e.getMessage();
	}

	return ret;

}
// *********************************************************
// PHP.INI のエントリの値( 2 )
// ※ split
// コメントを考慮していません( ; )
// 行解析の前に;を含む右側の文字列を取り去る必要があります
// *********************************************************
public String getPhpIni_2( String Entry ) {

	String ret = "";

	try {
		// 生のバイトのストリーム
		FileInputStream fis = new FileInputStream("c:\\php\\php.ini");
		// SHIFT_JIS として読み込む為の準備
		InputStreamReader isr = new InputStreamReader(fis, "SJIS");
		// 行単位で読み込む為の準備
		BufferedReader br = new BufferedReader(isr);

		String line_buffer = "";
		// BufferedReader は、readLine が null を返すと読み込み終了
		String str = "";
		while ( null != (line_buffer = br.readLine() ) ) {
			String[] result = line_buffer.split("=");
			str = (String)result[0];
			str = str.trim();
			if(str.equalsIgnoreCase( Entry )){
				ret = (String)result[1];
				ret = ret.trim();
			}
		}

		// 閉じる
		br.close();
		isr.close();
		fis.close();
	}
	catch( Exception e ) {
		ret = e.getMessage();
	}

	return ret;

}



タグ:java Tomcat
posted by lightbox at 2009-09-28 17:47 | java : テキストファイル | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します


Windows
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり