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である。
WindowsEclipse Version:3.1.0からのアクセス方法。最新版は対応していなかった(現在は不明)。


Java JSDKの設定

  • WindowsにJSDKをインストールしておく。
  • JSDKフォルダ\lib\下に、classes12.jarをコピーしておく。



Eclipse SDKの設定
  1. [Window]メニューの[Show View]-[DbEdit-Tables]を選択。
  2. Tablesのビューの上で右クリック、[NEW]-[Connection]を選択し、設定画面を表示する。
  3. 設定を変更するときは右クリック、[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ドライバーの設定が必要である。
  1. TNSNAMES.ORAの設定

  2. OracleクライアントのTNSNAMES.ORAファイルを編集し、Oracleサーバーの設定を追加する。

    C:\…\NETWORK\ADMIN\TNSNAMES.ORA
    
    [ネット・サービス名]=
      (DESCRIPTION=
        (ADDRESS=(PROTOCOL=TCP)(HOST=[アドレス])(PORT=[ポート番号]))
        (CONNECT_DATA=(SERVICE_NAME=[サービス名]))
      )

  3. ODBCドライバーの設定


    1. [コントロール パネル]−[管理ツール]−[データソース(ODBC)]を起動する。
    2. [User DSN]タブを選び、[Add...]ボタンをクリックする。
    3. 「Create New Data Source」ダイアログボックスで、「Oracle in Ora_Client_Home」をダブルクリックする。
    4. Oracle ODBC Driver Configuration」ダイアログボックスに、以下の情報を入力し、[OK]ボタンを押す。
    5. Data Source Name : データソース名(任意の名前)
      Description      : 説明
      TNS Service Name : サービス名
      User ID          : ユーザー名

    6. [Test Connection]ボタンをクリックし、接続テストを行う。「Connection successful」のメッセージが出れば成功。エラーが出た場合は、設定を見直す。



接続方法

プログラムからアクセスする方法

  • 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

  • PDF変換プログラムの例題の実行

  • ソース
      /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);
            }
        }
    }