nkfコマンドによる文字コードの変換
nkfコマンドは、入力ファイルについてはコードを自動的に判別するので、出力するコードをオプションで指定する。
構文
$ nkf [オプション] [入力ファイル名] > [出力ファイル名]
主なオプション
-e :EUC-JPで出力 -j :JIS 7bitで出力 -s :Shift-JISで出力 -w :UTF-8コードで出力(BOM無し) -Lu :UNIXの改行コード(LF)に変換 -Lw :Windowsの改行コード(CRLF)に変換 -Lm :Macintoshの改行コード(CR)に変換 -g(--guess) :自動判別の結果を表示 -u :変換結果のバッファリングを行わない --overwrite :入力ファイルを上書きして出力 --version :バージョン情報を表示 --help :ヘルプを表示
サンプル
ファイルの文字コードを調べる
$ nkf --guess index.jsp
日本語文字コードを変換する
EUC-JPに変換する。 $ nkf -e input_file.txt > euc_file.txt
改行コードを変換する
unixの改行コードに変換する。 $ nkf -Lu input_file.txt > unix_file.txt
EclipseからOracleへのアクセス方法
動作確認OSはWindows XP、オラクルのバージョンはOracle 10gである。
Windows版 Eclipse Version:3.1.0からのアクセス方法。最新版は対応していなかった(現在は不明)。
Java JSDKの設定
- WindowsにJSDKをインストールしておく。
- JSDKフォルダ\lib\下に、classes12.jarをコピーしておく。
Eclipse SDKの設定
- [Window]メニューの[Show View]-[DbEdit-Tables]を選択。
- Tablesのビューの上で右クリック、[NEW]-[Connection]を選択し、設定画面を表示する。
- 設定を変更するときは右クリック、[Connection]-[Configure]を選択し、設定画面を表示する。
Name : [接続名](任意の名前) Commonタブ JDBC Driver : oracle.jdbc.driver.OracleDriver Server URL : jdbc:oracle:thin:@//[ホスト名]:[ポート番号]/[接続するDBのSID] User : [ユーザー名] Classpathタブ [Add Archive]ボタンを押す。 SDKフォルダ\lib\classes12.jarを[開く]でPathに設定。
MATLABからOracleへのアクセス方法
動作確認OSはWindows XP、オラクルのバージョンはOracle 10gである。
設定方法
Windows版のMATLABからOracleデータベースへアクセスするには、TNSNAMES.ORAの設定とODBCドライバーの設定が必要である。- TNSNAMES.ORAの設定
- ODBCドライバーの設定
- [コントロール パネル]−[管理ツール]−[データソース(ODBC)]を起動する。
- [User DSN]タブを選び、[Add...]ボタンをクリックする。
- 「Create New Data Source」ダイアログボックスで、「Oracle in Ora_Client_Home」をダブルクリックする。
- 「Oracle ODBC Driver Configuration」ダイアログボックスに、以下の情報を入力し、[OK]ボタンを押す。
- [Test Connection]ボタンをクリックし、接続テストを行う。「Connection successful」のメッセージが出れば成功。エラーが出た場合は、設定を見直す。
OracleクライアントのTNSNAMES.ORAファイルを編集し、Oracleサーバーの設定を追加する。
C:\…\NETWORK\ADMIN\TNSNAMES.ORA [ネット・サービス名]= (DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)(HOST=[アドレス])(PORT=[ポート番号])) (CONNECT_DATA=(SERVICE_NAME=[サービス名])) )
Data Source Name : データソース名(任意の名前) Description : 説明 TNS Service Name : サービス名 User ID : ユーザー名
接続方法
プログラムからアクセスする方法
- database()で、データベースと接続する。
- exec()で、SQL文を実行する。SQL文の中に文字列がある場合は、'(クォーテーション)2つで囲むこと。
- fetch()で、データを取り出す。2番目の引数は取り出す行数で、指定しなければ全データが対象。
- データは cell 配列に読み込まれる。データを数値として取り出したい場合は、cell2mat()関数で単一行列に変換しなければならない。
詳しくは、マニュアル「Database Toolbox」の3章〜4章を参照のこと。
conn = database('[データソース名]','[ユーザー名]','[パスワード]'); curs = exec(conn, 'select * from usertable where okfield = ''OK'''); curs = fetch(curs, 10); D = curs.Data; % データ部分を切り出す D1 = D(:,[1]); % 最初のフィールドのデータを取り出す D1 = cell2mat(D1); % cell配列を数値の配列に変換する numrows = rows(curs); numcols = cols(curs); colnames = columnnames(curs); colsize = width(curs, 1); close(curs); close(conn);
Visual Query Builderツールを利用する方法
Visual Query Builderツールを使用して、Oracleデータベース上のデータを変数にインポートしたり、MATLAB上のデータをデータベースにインサートすることが可能である。ここでは、MATLABの変数にインポートする場合の手順のみを説明する。詳しくは、マニュアル「Database Toolbox」の第2章を参照のこと。
- 起動
- MATLABの左下の[スタート]ボタン−[Toolboxes]−[Database]−[Visual Query Builder]を選択し、起動する。
- Data operation
- [Select]を選択する。
- Data source
- いずれかを選択すると、UsernameとPasswordの入力ダイアログが表示されるので、入力し[OK]を押す。
- Tables
- いずれかを選択する。
- Fields
- いずれかを選択する。
- Advanced query options
- [All]か[Distinct]を選択する。必要なら、[Where...]、[Group by...]、[Having...]、[Order by...]のボタンを押して、条件を設定する。
- SQL statement
- SQLが表示される。編集も可能。
- MATLAB workspace variable
- データを出力する変数の名前を入力し、[Execute]ボタンを押す。
PHPからOracleへのアクセス方法
動作確認OSはSolaris 9、オラクルのバージョンはOracle 10gである。
<?php session_start(); header("Cache-control: private"); $db = OCILogon("scott","tiger", "[接続するDBのSID]"); if (!$db) { echo "<h3>ERROR - Could not connect to Oracle</h3>"; exit; } ?> <html> <head> <title>PHP5 test</title> </head> <body> <h3>PHP5 test</h3> <?php $searchStatement = OCIParse($db, "SELECT * FROM EMP"); OCIExecute($searchStatement); while(OCIFetchInto($searchStatement, &$resultArray)) { print $resultArray[0]."\t"; print $resultArray[1]."<br>\n"; } ?> </body> </html>
PerlからOracleへのアクセス方法
動作確認OSはSolaris 9、オラクルのバージョンはOracle 10gである。
#!/usr/local/bin/perl -w use DBI; $oracle_sid = "[接続するDBのSID]"; $user = "scott"; $password = "tiger"; $db = DBI->connect("dbi:Oracle:$oracle_sid", $user, $password, {AutoCommit => 0} ) || die $db->errstr; my $searchStatement = $db->prepare( "SELECT * FROM EMP" ) or die $db->errstr; $searchStatement->execute(); while(@resultArray = $searchStatement->fetchrow_array) { print $resultArray[0]."\t"; print $resultArray[1]."\n"; } $db->disconnect || die $db->errstr;
JavaからOracleへのアクセス方法
動作確認OSはSolaris 9、オラクルのバージョンはOracle 10gである。
以下の例のように、指定方法が異なる場合がある(原因不明)。
import java.sql.*; class JavaDataAccess01 { public static void main(String args[]) throws SQLException, ClassNotFoundException { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@[ホスト名]:[ポート番号]/[接続するDBのSID]", "scott", "tiger"); //以下のように指定しなければ動かない場合もある(原因不明)。 //DriverManager.getConnection( "jdbc:oracle:thin:@[ホスト名]:[ポート番号]:[接続するDBのSID]", "scott", "tiger"); Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("select EMPNO, ENAME from EMP"); while( rset.next()) { System.out.println(rset.getInt(1) + "\t" + rset.getString(2)); } rset.close(); stmt.close(); conn.close(); } }
Apache FOPによるSVG→PDFへの変換方法
動作確認OSは、Solaris 9である。
概要
FOPを使うことで、XSL-FOに準拠したXML文書をPDFファイルなどのファイル形式に変換したり、コンピュータの画面やプリンタに直接出力することができる。
ここでは、Javaプログラムにおける、SVGファイルからPDFファイルへの変換方法について説明する。
インストールと設定
インストール
アーカイブを展開する。/home/apache/tools/[任意のディレクトリ] $ gzip -d fop-0.94-src.tar.gz $ tar xvf fop-0.94-src.tar
ライブラリのコンパイル
fop-0.94ディレクトリ下でantを実行し、ライブラリをコンパイルしておく。jarファイルは、buildディレクトリ下に作成される。Javaプログラムのコンパイル時に必要である。$ cd /home/apache/tools/fop-0.94 $ ant ↓jarファイル作成 /home/apache/tools/fop-0.94/build/*.jar
環境変数CLASSPATHの設定
jarファイルは、Javaプログラムの実行時に必要となる。環境変数CLASSPATHの設定に、jarの記述を追加する。.profileの場合 CLASSPATH=.:〜 :/home/apache/tools/fop-0.94/build/fop.jar :/home/apache/tools/fop-0.94/build/fop-transcoder-allinone.jar :/home/apache/tools/fop-0.94/build/fop-transcoder.jar .cshrcの場合 setenv CLASSPATH .:〜 :/home/apache/tools/fop-0.94/build/fop.jar :/home/apache/tools/fop-0.94/build/fop-transcoder-allinone.jar :/home/apache/tools/fop-0.94/build/fop-transcoder.jar
使用方法
Javaプログラム例題(SVG→PDFの変換)
- java実行時のオプション指定
javaプログラム実行時に下記のオプションを指定すること。これは、内部で使用しているbatikがGraphics2D(2Dグラフィックス用の標準Java API)にイメージの生成を要求しており、Graphics2DがX11サーバーを必要とすることに起因している。JDK 1.4以降では、java.awt.headlessプロパティにtrueをセットすることで、いわゆるheadless(画面を出さない)で実行できるようになる。
java -Djava.awt.headless=true
ソース /home/apache/tools/batik-1.7/sources-pdf/SVG2PDF.java コンパイル $ cd /home/apache/tools/batik-1.7/sources-pdf $ ant ↓ classファイルは、classesディレクトリ下に作成される classファイルは、実行用transディレクトリにコピーされる 実行 $ cd ../trans $ go.pdf (java -Djava.awt.headless=true SVG2PDF /home/apache/public_html/trans/GVT.svg /home/apache/public_html/trans/GVT.pdf) ↓ /home/apache/public_html/trans/GVT.pdf
//Java import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; //Batik import org.apache.batik.transcoder.Transcoder; import org.apache.batik.transcoder.TranscoderException; import org.apache.batik.transcoder.TranscoderInput; import org.apache.batik.transcoder.TranscoderOutput; //FOP import org.apache.fop.svg.PDFTranscoder; /** * This class demonstrates the conversion of an SVG file to PDF using FOP. */ public class SVG2PDF { public void convertSVG2PDF(File svg, File pdf) throws IOException, TranscoderException { //Create transcoder Transcoder transcoder = new PDFTranscoder(); //Setup input InputStream in = new java.io.FileInputStream(svg); try { TranscoderInput input = new TranscoderInput(in); //Setup output OutputStream out = new java.io.FileOutputStream(pdf); out = new java.io.BufferedOutputStream(out); try { TranscoderOutput output = new TranscoderOutput(out); //Do the transformation transcoder.transcode(input, output); } finally { in.close(); } } finally { in.close(); } } /** * Main method. * @param args command-line arguments */ public static void main(String[] args) { try { System.out.println("FOP SVG2PDF\n"); //Setup input and output files File svgfile = new File(args[0]); File pdffile = new File(args[1]); System.out.println("Input: SVG (" + svgfile + ")"); System.out.println("Output: PDF (" + pdffile + ")"); System.out.println(); System.out.println("Transforming..."); SVG2PDF app = new SVG2PDF(); app.convertSVG2PDF(svgfile, pdffile); System.out.println("Success!"); } catch (Exception e) { e.printStackTrace(System.err); System.exit(-1); } } }