2012年9月28日金曜日

Perl で sscanf

Perl で例えば 2012年9月1日 のような日付を、2012/09/01 のような形式に変換したい場合があります。以下はそのための、sscanf を使ったサンプルです。



use String::Scanf;

   my $hiduke0 = "2012年9月1日";
   my ($a,$b,$c)=sscanf('%d年%d月%d日',$hiduke0);
   printf('%4d/%02d/%02d'. "\n" , $a,$b,$c);


2012年9月26日水曜日

LibreOffice のマクロで、MySqlに接続する

LibreOfficeではマクロが使用できます。使用したのは、Unix(Ubuntu12.04)上で動作するLibreOfficeのバージョン3.5.4.2です。
以下はMySQLに接続して、レコードを挿入するサンプルです。ユーザ名とパスワードは'root'でデータベース名は、stock_dbでテーブル名は、stock です。



sub main7 

Dim DatabaseContext as object
Dim DataSource as Object
Dim Connection as Object
Dim Statement as Object
Dim sSQL as String

Dim oResultSet as Object
Dim nDlgResult As Integer

Dim sURL as String
Dim oProps(2) as new com.sun.star.beans.PropertyValue
' ***** データベースのコネクション  *****
DatabaseContext=createUnoService("com.sun.star.sdbc.DriverManager") 
sURL = "jdbc:mysql://127.0.0.1:3306/stock_db?useUnicode=true&characterEncoding=UTF-8"
oProps(0).Name = "user"
oProps(0).value = "root"
oProps(1).Name = "password"
oProps(1).value = "root"
oProps(2).name = "JavaDriverClass"
oProps(2).value = "com.mysql.jdbc.Driver"

Connection = DatabaseContext.getConnectionWithInfo(sURL, oProps())

' ***** SQLの実行  *****
Statement = Connection.createStatement()
 nResult = Statement.executeUpdate("INSERT INTO stock (code,hiduke,jikoku,price )" & _ 
  "VALUES (1003, '2012/09/24','15:00',12400)")

' oResultSet = Statement.executeQuery("SELECT * FROM stock;")
' oResultSet.Next
' Msgbox(oResultSet.getString(1))

' ***** データベースを閉じる  *****
Statement.Close()
Connection.Close()
Connection.Dispose()

end sub 


OpenOffice(LibreOffice)からAccessデータベースに接続

OpenOfficeでAccessのデータベースへ接続することができます。Accessを持っていなくてもテーブルの中身を見ることができるので便利です。Windows版のOpenOffice3.4.1を使用しました。Windows版LibreOffice3.5.6.2でも試したところ同様に見ることができました。Access2003のmdbファイルの中身を見ることができました。


Java から Access の mdb に接続する

以下は、JavaでAccessのmdbにODBC経由で接続して、テーブルの中身を表示するサンプルです。WindowsXPを使用しています。あらかじめコントロールパネルの管理ツールで、ODBCデータソースを設定しておきます。サンプルではデータソース名は、passwdでテーブル名はpasswordです。テーブルの中には、uniq_id,keyword,password,dateというフィールドが存在します。日本語が文字化けする場合があります。


import java.sql.*;

public class password {

 public static void main(String[] args) {
  try{
  //
  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  //
  Connection con=DriverManager.getConnection("jdbc:odbc:passwd");
  //
  Statement stmt = con.createStatement();
  //
  String sql = "SELECT * FROM password";
  //
  ResultSet rs = stmt.executeQuery(sql);
  //
   while(rs.next()){
    //
    int uniq_id = rs.getInt("uniq_id");
    //
    String keyword = rs.getString("keyword");
    //
    String password = rs.getString("password");
    //
    String date = rs.getString("date");
    
    //
    System.out.println(uniq_id + " " + keyword + " " + password + " " + date);
   }
  stmt.close();
  con.close(); 
  }catch(Exception e){
   e.printStackTrace();
  }
  
  
 }

}






(2014.7.9)この方法は、 Java 8 になってからは使用できなくなりました。

http://chaos-fractal.blogspot.jp/2014/07/java-access-jdbc-odbc.html





2012年9月25日火曜日

Perl からMySqlに接続する


以下のサンプルは、インターネットのどこかに載っていたのをほとんどそのまま使用しています。(感謝)cgi として動作するようになっているはずです。ユーザ名とパスワードは'root'としています。またデータベース名はstock_db、   テーブル名はstock としています。



#!/usr/bin/perl

use DBI;

$dbuser="root";
$dbpass="root";
$dbname="stock_db";
$sql="select * from stock";

$dsn = "DBI:mysql:$dbname";
$dsh = DBI -> connect ( $dsn, $dbuser, $dbpass , { RaiseError => 0 } );
$sth = $dsh->prepare($sql);
$sth->execute;
$num_rows = $sth->rows;

print "Content-type: text/html\n\n";

print <<HTML_HEAD;


HTML_HEAD

if ($dsh) {
    print "successfully connected to the database<br>\n";
} else {
    print "fail to connect to the database<br>\n";
}

print "number of records : $num_rows <br>\n";

for ($i=0; $i<$num_rows; $i++) {
    @a = $sth->fetchrow_array;
    print "code=$a[0], hiduke=$a[1] ,jikoku=$a[2] ,price=$a[3]<br>\n";
}

print <<HTML_TAIL;


HTML_TAIL

$sth->finish;
$dsh -> disconnect;

exit(0);





PHP から MySql に接続する

PHP から MySql に接続して、テーブルの内容を表示するサンプルです。ユーザー名とパスワードは'root'にしてあります。データベース名は、'stock_db'でテーブル名は、'stock'です。




-------------------------------------------------------------------

<html>
<head>
<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=utf-8">
</head>

<?php
$server    = '127.0.0.1';
$username  = 'root';
$password  = 'root';

$link = mysql_connect($server, $username, $password);
if (!$link) {
    die('can not connect : ' . mysql_error());
}
echo 'successfully connected';

$db_selected = mysql_select_db('stock_db',$link);
if (!$db_selected){
    die('fail to select database'.mysql_error());
}

$result = mysql_query('SELECT * FROM stock');
if (!$result) {
    die('query fail'.mysql_error());
}

$numFields = mysql_num_fields($result);
print("<br>num of fields:");
print($numFields);

$nameFields = array();
for($i=0;$i<$numFields;$i++){
$nameFields[] = mysql_field_name($result, $i);
}


    print("<br>");
    print("<table border=1>");
    print("<tr>");
for($j=0;$j<$numFields;$j++){
    print("<td>");
    print($nameFields[$j]);
    print("</td>");
}
    print("</tr>");

while ($row = mysql_fetch_assoc($result)) {
    print("<tr>");
    for($j=0;$j<$numFields;$j++){
        print("<td>");
        print($row[$nameFields[$j]]);
        print("</td>");
    }
    print("</tr>");
}
    print("</table>");
mysql_close($link);
?>

</html>


-------------------------------------------------------------------

2012年9月22日土曜日

Ubuntu でLibreOffice からMySqlに接続する。


使用したバージョン

Ubuntu 12.04
LibreOffice 3.4.5.2





Ubuntu のLibreOfficeのBaseからMySqlに接続する方法は3とおりあるようです。ODBC、JDBCを使う方法と、ダイレクト(直接)に接続する方法です。




●ODBCを使用するには、以下を実行してからsudo ODBCConfig で設定を行ないます。(ただし、Ubuntu12.04ではODBCConfigがコマンドが見つかりませんとなってしまい実行できません。
代わりに sudo ODBCManageDataSourcesQ4 を実行し、ODBC設定を行ないます。)

sudo apt-get install unixodbc unixodbc-bin libmyodbc 



ドライバーの情報およびODBC登録した結果は/etc/odbcinst.ini および/etc/odbc.ini に記録されます。以下は、私のマシンでの/etc/odbcinst.ini の内容です。

[MySQL ODBC Driver]

Description             =
Driver          = /usr/lib/i386-linux-gnu/odbc/libmyodbc.so
Setup           = /usr/lib/i386-linux-gnu/odbc/libodbcmyS.so
UsageCount              = 1
CPTimeout               =
CPReuse         =

以下のサイトを参照しました。

http://sourceforge.jp/magazine/07/02/28/0121236




●JDBC経由でMySqlに接続しようとして、はじめはうまくいきませんでしたが、以下のサイトを参照してできるようになりました。

http://maxolasersquad.blogspot.jp/2011/03/connect-to-mysql-database-from.html

準備として以下を実行する必要があるようです。

sudo apt-get install libmysql-java



●ダイレクトに接続する方法としては、以下のサイトを参照しました。

http://ns.uchb.net/os/libreoffice.html


Synapticパッケージマネージャから"openclipart-libreoffice"をインストールします。



●参考
MySQLへのODBC経由での接続
http://chaos-fractal.blogspot.jp/2011/11/mysql-odbc.html


OpenOfficeからSQLiteに接続する
http://www.serendip.ws/archives/5250



Javaでコマンドラインから入力を促し文字列を取得する。



コマンドラインから入力してもらった文字列を取得したい場合があります。以下のサンプルでは、コマンドラインから名前を入力してもらい、それを取得して表示します。

import java.io.*;



public class ReadLine{

 public static void main(String[] args){

  try{
   BufferedReader bf = new BufferedReader
   (new InputStreamReader(System.in));
   System.out.print("Enter your name:");
   String yourname = bf.readLine();
   System.out.println("helo:" + yourname);
  } catch(Exception e){
   e.printStackTrace();
  }
 }
}





2012年9月21日金曜日

Java プログラムでMySqlを操作する

以下のサイトを参照させてもらいました。



http://www.roseindia.net/jdbc/jdbc-mysql/index.shtml


以下はemployeeテーブルの内容を表示するJavaサンプルプログラムです。

import java.sql.*;

public class GetAllRows{
  public static void main(String[] args) {
  System.out.println("Getting All Rows from a table!");
  Connection con = null;
  String url = "jdbc:mysql://localhost:3306/";
  String db = "employee_db";
  String driver = "com.mysql.jdbc.Driver";
  String user = "root";
  String pass = "root";
  try{
  Class.forName(driver).newInstance();
  con = DriverManager.getConnection(url+db, user, pass);
  try{
  Statement st = con.createStatement();
  ResultSet res = st.executeQuery("SELECT * FROM  employee");
  System.out.println("code: " + "\t" + "employee: ");
  while (res.next()) {
  int i = res.getInt("id");
  String s = res.getString("employee");
  System.out.println(i + "\t\t" + s);
  }
  con.close();
  }
  catch (SQLException s){
  System.out.println("SQL code does not execute.");
  }  
  }
  catch (Exception e){
  e.printStackTrace();
  }
  }
}



2012年9月18日火曜日

Java 時刻を表示

以下はサンプル


import java.util.Calendar;


public class checktime{

 public static void main(String[] args) {
  
  String Timedate = checkTime();
  System.out.println(Timedate);
  

 }

 private static String  checkTime(){
        
     String modori;
     Calendar cal1 = Calendar.getInstance();  

     int year = cal1.get(Calendar.YEAR);        
     int month = cal1.get(Calendar.MONTH) + 1;  
     int day = cal1.get(Calendar.DATE);         
     int hour = cal1.get(Calendar.HOUR_OF_DAY); 
     int minute = cal1.get(Calendar.MINUTE);    
     int second = cal1.get(Calendar.SECOND);    

     StringBuffer dow = new StringBuffer();
     switch (cal1.get(Calendar.DAY_OF_WEEK)) {  
       case Calendar.SUNDAY: dow.append("日曜日"); break;
       case Calendar.MONDAY: dow.append("月曜日"); break;
       case Calendar.TUESDAY: dow.append("火曜日"); break;
       case Calendar.WEDNESDAY: dow.append("水曜日"); break;
       case Calendar.THURSDAY: dow.append("木曜日"); break;
       case Calendar.FRIDAY: dow.append("金曜日"); break;
       case Calendar.SATURDAY: dow.append("土曜日"); break;
     }

     
     modori =String.format("%04d/%02d/%02d%s%02d:%02d:%02d"
       ,year,month,day,dow,hour,minute,second);

     return modori;
     
     
     }
}


2012年9月17日月曜日

Java でExcel ファイルを作成する。(JExcelApi)(2)

Java でExcel ファイルを作成するサンプルです。(動作は無保証です。) 先日の「Excelファイルを編集する」と同様にJExcelApiを使用しています。


import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Locale;

import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.write.Label;
//import jxl.write.Number;

import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;




public class ExcelWrite {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub

 try{ 
  
  WorkbookSettings settings = new WorkbookSettings();
     settings.setLocale(new Locale("ja", "JP"));
     settings.setEncoding("Windows-31J");
     
     OutputStream os = new FileOutputStream("output.xls");
     WritableWorkbook workbook = Workbook.createWorkbook(os, settings);
     
     // シートの新規作成
     WritableSheet sheet = workbook.createSheet("sheet1", 0);
     
     // ※ここからシートの書き込み処理を記述する
     Label label = new Label(0, 0, "サンプル");
     sheet.addCell(label);
     
     // 終了処理
     workbook.write();
     workbook.close();

 }catch(Exception ex){
  System.err.println("失敗しました.:" + ex.toString());
 }finally{

  System.out.println("終了しました.:");

  ;
  
 }
 


 }

}




Java でExcel ファイルを作成する。(JExcelApi)

Java でExcel ファイルを作成するサンプルです。(動作は無保証です。) 先日の「Excelファイルを編集する」と同様にJExcelApiを使用しています。



import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Locale;

import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.write.Label;
import jxl.write.Number;

import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

/*
import java.io.File; 
import java.util.Date;
*/ 
import jxl.*; 
import jxl.write.*; 



public class ExcelWrite {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub

  
  
  WritableWorkbook workbook=null;
  
  String outputFileName = "output.xls";

try{  
  workbook = Workbook.createWorkbook(new File(outputFileName));

  WritableSheet sheet = workbook.createSheet("Sheet1", 0);
//  WritableSheet sheet = workbook.createSheet("First Sheet", 0);
 
 


  Label label = new Label(0, 2, "サンプル"); 
  sheet.addCell(label); 

  Number number = new Number(3, 4,12800); 
  sheet.addCell(number);
 
 
  workbook.write(); 
  workbook.close();
}catch(Exception ex){
 System.err.println("失敗しました.:" + ex.toString());
}finally{

 System.out.println("終了しました.:");

 ;
 
}


 }

}



2012年9月15日土曜日

Java でファイルにappendする

以下は既にあるファイルの最後に行を追加するサンプルです。
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

class FileAppend{
   public static void main(String args[]){
      
      try{
       File file = new File("test.txt");

         FileWriter filewriter = new FileWriter(file, true);

         filewriter.write("この行を追加します1\n");
         filewriter.write("この行も追加します2\n");

         
         filewriter.close();
     }catch(IOException e){
       System.out.println(e);
     }
    
    
   }
}   
   
   

2012年9月14日金曜日

Ubuntu 12.04 でcrontab の設定

以下のように入力して、ファイルを編集する。
crontab -e

 以下は java -jar /home/excelwrite3.jar > /dev/null 2>&1 というコマンドを月曜日~金曜日、8時~15時台、5分おきに実行する場合の例です。


例) */5 8-15 * * 1-5 java -jar /home/excelwrite3.jar > /dev/null 2>&1

2012年9月13日木曜日

Java でファイルを1行づつ読み込み配列に格納する

サンプルプログラム(以下のサンプルでは、zzz.txtというファイルの中身を1行づつ読み出してstrarray[]という配列に格納しています。)

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;


public class FileRead {

 public static void main(String[] args) {
          
  String[] strarray = new String[1000];
      
       
  int i = 0;
       
       
  try{
       File file = new File("zzz.txt");

       BufferedReader br = new BufferedReader(new FileReader(file));

       String str= null;
       i=0;
       while((str = br.readLine()) != null){
           System.out.println(str);
              
           strarray[i]=str;
           i = i +1;
              
       }

       br.close();
       
              
  }catch(FileNotFoundException e){
        System.out.println(e);
  }catch(IOException e){
        System.out.println(e);
  }
 }

}


2012年9月12日水曜日

Java でExcelファイルを編集する。(JExcelApi)

JavaでExcelファイルを弄る方法としてPOIを使用する方法もあるようですがこの例ではJExcelApiを使用します。JExcelApiはhttp://sourceforge.net/projects/jexcelapi/files/ からダウンロードできます。(ダウンロードしたファイルを解凍すると、jxl.jarというファイルがありますので、それをクラスパスに通します。)

参考にさせていただいたサイト
http://homepage3.nifty.com/anny/index.html
http://vapour.s22.xrea.com/javadojo/index.php?Java%A4%C7Excel
http://jexcelapi.sourceforge.net/


サンプル 


import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;


public class ExcelEdit {

 public static void main(String[] args) {


  int line = 8;
    
        Workbook workbook = null;
       
        try {
              
          WorkbookSettings ws = new WorkbookSettings();
            ws.setGCDisabled(true);
      workbook = Workbook.getWorkbook(new File("output.xls"), ws);

    } catch (BiffException e) {
          e.printStackTrace();
    } catch (IOException e) {
          e.printStackTrace();
    } finally {
          if (workbook != null) {
               ;
          }
  }

       
  File outputFile= new File("output.xls");
    
    
  WritableWorkbook workbook1=null;
    
  try {
   System.out.println(outputFile + "ブックを新規作成");
   workbook1 = Workbook.createWorkbook(outputFile,workbook);
    if (workbook1 == null) {
     System.err.println(outputFile 
       + "ブック作成に失敗");
     }
    } catch (IOException ex) {
     System.err.println(ex.toString());
    }
    WritableSheet sheet = workbook1.getSheet(0);
    if (sheet == null) {
     System.err.println(outputFile 
       + "シート設定に失敗");
    }
    
    

    Label label = new Label(1, line, "サンプル");
    try {
     sheet.addCell(label);
    } catch (WriteException ex) {
     System.err.println("セルの書き込みに失敗" 
                + ex.toString());
    }

    Number number = new Number(0, line, 12800);
    try {
     sheet.addCell(number);
    } catch (WriteException ex) {
     System.err.println("line セルの書き込みに失敗" 
                + ex.toString());
    }
    
    
    System.out.println("日付セルを新規作成");
    SimpleDateFormat format 
    = new SimpleDateFormat("yyyy/MM/dd");
    String dateStr = format.format(new Date());
    Label label2 = new Label(2, line, dateStr);
    try {
     sheet.addCell(label2);
    } catch (WriteException ex) {
     System.err.println("セルの書き込みに失敗" 
                           + ex.toString());
    }
   
   
    try {
     workbook1.write();
    } catch (IOException ex) {  
     if (workbook1 != null) {
     
     System.err.println(outputFile 
       + "ブックの書き込みに失敗"
       + ex.toString());
    
     }
     
     }
    
    try {

     workbook1.close();
     workbook.close();

    } catch (Exception ex) {
     System.err.println(outputFile 
       + "ブックのクローズに失敗"
       + ex.toString());
    }
        
       
      }

  

}


2012年9月2日日曜日

JAVA jsoup で株価を取得する


JAVAのプログラムで、Yahooのサイトから株価を取得してみました。jsoupを使用しました。以下のサンプルプログラムでは、東京電力(9501)の株価を取得しています。jsoupはhttp://jsoup.org/download からダウンロードして使用しました。



サンプルプログラム
--------------------------------------


import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;


public class GetPrice {
    public static void main(String[] args) throws IOException {

    String url = "http://stocks.finance.yahoo.co.jp/stocks/detail/?code=9501.T";

        Document doc = Jsoup.connect(url).get();
        Elements stoksPrices=doc.select("td[class=stoksPrice]");
       

        for (Element stoksPrice : stoksPrices){
            System.out.println(stoksPrice.text());

        }  
       
    }

}