2012年12月28日金曜日

追加課題(12/28)

追加課題
見出し1見出し2見出し3見出し4見出し5
内容11内容12内容13内容14内容15
内容21内容22内容23内容24内容25
内容31内容32内容33内容34内容35
内容41内容42内容43内容44内容45
内容51内容52内容53内容54内容55

既存のエクセル内の表に対して
 A.一番上の行を見出し行と見なし,黒背景白文字ボールドセンタリングを行う
 B.2行目以下について,偶数行と奇数行で背景色を交互に塗り分け
を実現
ここで,実装するべき機能は
 1.選択されたセルを開始位置として,そこから表が続く限り処理を繰り返す
   (表が終われば処理終了)
 2.1つめのif文で1行目か否かを判別し,1行目ならばAの処理を実行
 3.2つめのif文で2行目移行と判別できたら,その行が奇数行か偶数行か判別
  3-1.奇数行だった場合,少し薄めの色で背景を塗る
 3-2.偶数行だった場合,奇数行よりも少し濃いめの色で背景を塗る
です.


1.横方向に移動し,セルの内容を表示するプログラム
Sub ironuri1()
    Do While Not (ActiveCell.Value = "")
        MsgBox ActiveCell.Value
        ActiveCell.Offset(0, 1).Select
    Loop
End Sub
2.縦方向に移動し,セルの内容を表示するプログラム
Sub ironuri2()
    Do While Not (ActiveCell.Value = "")
        MsgBox ActiveCell.Value
        ActiveCell.Offset(1, 0).Select
    Loop
End Sub
3.横方向に移動し,セルの内容を表示するプログラム
  +行末までたどり着いたら自動的に改行
Sub ironuri3()
    Do While Not (ActiveCell.Value = "")
        MsgBox ActiveCell.Value
        ActiveCell.Offset(0, 1).Select
    Loop
    ActiveCell.Offset(1, 0).Select
End Sub
4.横方向に移動し,セルの内容を表示するプログラム
  +行末までたどり着いたら自動的に改行
  +表の左端まで移動
Sub ironuri4()
    Do While Not (ActiveCell.Value = "")
        MsgBox ActiveCell.Value
        ActiveCell.Offset(0, 1).Select
    Loop
    ActiveCell.Offset(1, -5).Select
End Sub
5.横方向に移動し,セルの内容を表示するプログラム
  +行末までたどり着いたら自動的に改行
  +「任意の大きさの」表の左端まで移動
Sub ironuri5()
    Dim i As Integer
    i = 1
    Do While Not (ActiveCell.Value = "")
        MsgBox ActiveCell.Value
        ActiveCell.Offset(0, 1).Select
        i = i + 1
    Loop
    ActiveCell.Offset(1, (-i + 1)).Select
End Sub
6.横方向に移動し,セルの内容を表示するプログラム
  +行末までたどり着いたら自動的に改行
  +「任意の大きさの」表の左端まで移動
  +移動後の行に対しても同様の処理を行う
  =任意の表の各セル全範囲を移動し,セルの内容を表示するプログラム
Sub ironuri6()
    Do While Not (ActiveCell.Value = "")
        Dim i As Integer
        i = 1
        Do While Not (ActiveCell.Value = "")
            MsgBox ActiveCell.Value
            ActiveCell.Offset(0, 1).Select
            i = i + 1
        Loop
        ActiveCell.Offset(0, (-i + 1)).Select
        ActiveCell.Offset(1, 0).Select
    Loop
End Sub
7.任意の表の各セル全範囲を移動し,セルの内容を表示するプログラム
  +行数把握
Sub ironuri7()
    Dim j As Integer
    j = 1
    Do While Not (ActiveCell.Value = "")
        Dim i As Integer
        i = 1
        Do While Not (ActiveCell.Value = "")
            MsgBox ActiveCell.Value & ", " & j & "行目"
            ActiveCell.Offset(0, 1).Select
            i = i + 1
        Loop
        ActiveCell.Offset(0, (-i + 1)).Select
        ActiveCell.Offset(1, 0).Select
        j = j + 1
    Loop
End Sub
8.任意の表の各セル全範囲を移動し,セルの内容を表示するプログラム
  +行数把握
  +1行目とその他の行で処理分岐
Sub ironuri8()
    Dim j As Integer
    j = 1
    Do While Not (ActiveCell.Value = "")
        Dim i As Integer
        i = 1
        Do While Not (ActiveCell.Value = "")
            If j = 1 Then
                MsgBox ActiveCell.Value & ", " & j & "行目(見出し行です)"
            Else
                MsgBox ActiveCell.Value & ", " & j & "行目(見出し行ではありません)"
            End If
            ActiveCell.Offset(0, 1).Select
            i = i + 1
        Loop
        ActiveCell.Offset(0, (-i + 1)).Select
        ActiveCell.Offset(1, 0).Select
        j = j + 1
    Loop
End Sub
9.任意の表の各セル全範囲を移動し,セルの内容を表示するプログラム
  +行数把握
  +1行目とその他の行で処理分岐
  +2行目以降の奇数行・偶数行で処理分岐
Sub ironuri9()
    Dim j As Integer
    j = 1
    Do While Not (ActiveCell.Value = "")
        Dim i As Integer
        i = 1
        Do While Not (ActiveCell.Value = "")
            If j = 1 Then
                MsgBox ActiveCell.Value & ", " & j & "行目(見出し行です)"
            Else
                If (j Mod 2) = 1 Then
                    MsgBox ActiveCell.Value & ", " & j & "行目(見出し行ではありません)(奇数行)"
                Else
                    MsgBox ActiveCell.Value & ", " & j & "行目(見出し行ではありません)(偶数行)"
                End If
            End If
            ActiveCell.Offset(0, 1).Select
            i = i + 1
        Loop
        ActiveCell.Offset(0, (-i + 1)).Select
        ActiveCell.Offset(1, 0).Select
        j = j + 1
    Loop
End Sub
10.任意の表の各セル全範囲を移動し,セルの内容を表示するプログラム
   +行数把握
   +1行目とその他の行で処理分岐
   +2行目以降の奇数行・偶数行で処理分岐
   +各行にあわせた処理を記述
Sub ironuri10()
    Dim j As Integer
    j = 1
    Do While Not (ActiveCell.Value = "")
        Dim i As Integer
        i = 1
        Do While Not (ActiveCell.Value = "")
            If j = 1 Then
                MsgBox ActiveCell.Value & ", " & j & "行目(見出し行です)"
                ActiveCell.Font.Bold = True
                ActiveCell.Font.ColorIndex = 2
                ActiveCell.Interior.ColorIndex = 1
            Else
                If (j Mod 2) = 1 Then
                    MsgBox ActiveCell.Value & ", " & j & "行目(見出し行ではありません)(奇数行)"
                    ActiveCell.Interior.ColorIndex = 15
                    ActiveCell.BorderAround ColorIndex:=1
                Else
                    MsgBox ActiveCell.Value & ", " & j & "行目(見出し行ではありません)(偶数行)"
                    ActiveCell.Interior.ColorIndex = 48
                    ActiveCell.BorderAround ColorIndex:=1
                End If
            End If
            ActiveCell.Offset(0, 1).Select
            i = i + 1
        Loop
        ActiveCell.Offset(0, (-i + 1)).Select
        ActiveCell.Offset(1, 0).Select
        j = j + 1
    Loop
End Sub

2012年12月25日火曜日

Select-Caseステートメント SAMPLE(Excel VBA)

shiken3()
Sub shiken3()
    Dim tensuu As Integer
    tensuu = Range("C26").Value
    If tensuu >= 80 Then
        MsgBox "合格です"
    Else
        If tensuu >= 60 Then
            MsgBox "追試です"
        Else
            MsgBox "不合格です"
        End If
    End If
End Sub

waribiki()
Sub waribiki()
    Dim kingaku As Currency
    kingaku = Range("C33").Value
    If Range("D33").Value = "一般" Then
        If kingaku >= 50000 Then
            MsgBox "一般:15%割引です"
        Else
            If kingaku >= 30000 Then
                MsgBox "一般:10%割引です"
            Else
                If kingaku >= 10000 Then
                    MsgBox "一般:5%割引です"
                Else
                    MsgBox "一般:割引なしです"
               End If
            End If
        End If
    Else
        If Range("D33").Value = "会員" Then
            If kingaku >= 50000 Then
                MsgBox "会員:30% 割引です"
            Else
                If kingaku >= 30000 Then
                    MsgBox "会員:20%割引です"
                Else
                    If kingaku >= 10000 Then
                        MsgBox "会員:10%割引です"
                    Else
                        MsgBox "会員:割引なしです"
                    End If
                End If
            End If
        End If
    End If
End Sub

iro()
Sub iro()
    Select Case Range("C34").Value
    Case "RED"
        strIro = "RED"
    Case "BLUE"
        strIro = "BLUE"
    Case "PINK"
        strIro = "PINK"
    Case "GREEN"
        strIro = "GREEN"
    Case Else
        strIro = "RED.BLUE.PINK.GREENのいずれかを入力してください"
    End Select
        MsgBox strIro
End Sub

2012年10月25日木曜日

WEBアプリケーションサーバの構築(6) crontab

1.Shell Scriptエラー処理 前回のツールを動作させる前提として「img」ディレクトリが必要だが,もし存在しないとうまく動作しない.
そこで,「img」ディレクトリの存在有無をチェックし,もし存在しない場合は,ディレクトリを作成するようにツールを編集する.
get_image2.sh
#!/bin/bash

for user in `ls /home`
do
    id $user > /dev/null 2>&1
    if [ $? -eq 0 ] && [ ! -d /home/$user/public_html ]; then
        mkdir -p /home/$user/public_html
        chown $user. /home/$user/public_html
        chmod 711 /home/$user
        echo $user
    fi
done


2.crontabの利用 逆方向も試してみよう
WEBから受け取った値...天気予報の予報値や,特定サイトの値...を,
シェルスクリプトでDBサーバに自動登録.
さらにcrontabを使って,定期的に自動実行.
登録された値はHTMLファイルで閲覧可能なものを作成.
#goo天気の場合
#元ファイル取得
# wget http://weather.goo.ne.jp/area/4610.rdf
#時刻
# grep lastBuildDate 4610.rdf | sed -e "s/\(.*\)<\/lastBuildDate>/\1/g"
#天気
# grep description 4610.rdf | sed -e "s/\(.*\)<\/description>/\1/g"

#Yahoo天気の場合
#元ファイル取得
 wget http://rss.weather.yahoo.co.jp/rss/days/4410.xml
#時刻
 grep lastBuildDate 4410.xml | sed -e "s/\(.*\)<\/lastBuildDate>/\1/g"
#現在の天気と気温を抽出
 grep -n description 4410.xml | grep ^13 | sed -e "s/\(.*\)<\/description>/\1/" | sed "s/\s//g" | sed "s/^.*-//g" | sed "s/\/.*$//g"

1.SQL文を用意
vi temp.sql
 insert into temp (temp) values (10);

2.1で作成したファイルを用いてMySQLへ値流し込み
mysql -u root -s test < temp.sql

3.temp.sqlの値を自動的に更新するシェルスクリプトを作成
temp.sql
 #!/bin/sh
 echo "insert into temp (temp) values (10);" > temp.sql
 /usr/bin/mysql -u root -s test < temp.sql
 exit 0

chmod u+x temp.sql
./temp.sql

4.temp.sqlの中身を自動的に変更する.
temp.sql
 !/bin/sh
 wget http://rss.weather.yahoo.co.jp/rss/days/4410.xml
 str_temp=`grep -n description 4410.xml | grep ^13 | sed -e "s/\(.*\)<\/description>/\1/" | sed "s/\s//g" | sed "s/^.*-//g" | sed "s/\/.*$//g"`
 echo 'insert into temp (temp) values ("'$str_temp'");' > temp.sql
 /usr/bin/mysql -u root -s test < temp.sql
 rm 4410.xml
 exit 0

5.対象とする地域を複数とする.
ファイル名の下2桁目が可変 ---> 4410.xml/4420.xml/4430.xml ... ---> 44*0.xmlの*が1~9まで変化

2012年10月18日木曜日

WEBアプリケーションサーバの構築(5) Shell Script

1.Google画像検索APIの利用
http://ajax.googleapis.com/ajax/services/search/images?q=sato&v=1.0&rsz=1


2.Google画像検索API + shellの利用
curl -s 'http://ajax.googleapis.com/ajax/services/search/images?q=sato&v=1.0&rsz=1' | tr , \\n | grep "url" | sed -e 's/"url"://g' -e 's/"//g'
→Google画像検索の1番最初にマッチした画像のURLが表示される.

3.ツールの作成

get_image.sh
#!/bin/sh

target_list=`/usr/bin/mysql -u root -p[password] arts -e "select name from sa2012"`

for name in $target_list
do
        image_url=`curl -s 'http://ajax.googleapis.com/ajax/services/search/images?q='$name'&v=1.0&rsz=1' | tr , '\\n' | grep "url" | sed -e 's/"url"://g' -e 's/"//g'`

        echo $name" --> "$image_url

        curl -s -o img/$name.jpg $image_url
done

exit 0

※{password}は自自身のパスワードに置き換えること.


4.ツールを使用することで,DBに登録されたユーザの画像を,ユーザー名をファイル名として取得することが可能になったので,リストに画像も併せて表示する.
list6.html
<html>
<head>
    <meta http-equiv=content-type content="text/html; charset=UTF-8">
 <title>real-time search sample(AJAX)</title>
 
 <STYLE TYPE="text/css">
 <!--
 .table1 {
  width: 400px;
  border-collapse: collapse;
  border: 1px #708090 solid;
 }
 .table1 TD {
  border: 1px #708090 solid;
 }
 -->
 </STYLE> 
 
    <script type="text/javascript" src="xmlhttp.js"></script>
    <script type="text/javascript">
    <!--
    findText = findTextOld = "";

    function loadXmlFile(fName){
        httpObj = createXMLHttpRequest(displayData);
        if (httpObj){
            httpObj.open("GET",fName,true);
            httpObj.send(null);
        }
    }

    function displayData(){
        if ((httpObj.readyState == 4) && (httpObj.status == 200)){
            xmlData = httpObj.responseXML;
            $("result").innerHTML = parseXmlData(httpObj.responseText);
        }else{
            $("result").innerHTML = "Loading ...";
        }
    }

    function parseXmlData(xmlData){
        $("result").innerHTML = xmlData;
        idListTags = document.getElementsByTagName("id");
        numListTags = document.getElementsByTagName("num");
        nameListTags = document.getElementsByTagName("name");
        idLen = idListTags.length;

        resultText = "<table class='table1'><tr><th colspan=5>list</th></tr><tr><td><b>id</b></td><td><b>num</b></td><td><b>name</b></td><td><b>image</b></td></tr>";
        for(i=0; i<idLen; i++){
            id = idListTags[i].childNodes[0].nodeValue;
            num = numListTags[i].childNodes[0].nodeValue;
            name = nameListTags[i].childNodes[0].nodeValue;
            str = name.match(findText);
            if (str){
                resultText += "<tr><td>" + id + "</td><td><a href='http://10.2.5." + num + "' target='_blank'>" + num + "</a></td><td>" + name + "</td><td><img height=100 width=100 src='img/" + name + ".jpg'></td></tr>";
            }
        }
        resultText += "</table>";
        return resultText;
    }

    function inputCheck(){
        findText = document.ajaxForm.requestText.value;
        if (findText != findTextOld) {
            str_search = "./backend.php?search_key=" + findText
            loadXmlFile(str_search);
            findTextOld = findText;
        }else{
//            $("result").innerHTML = "Loading ...";
        }
        setTimeout(" inputCheck()",500); // 0.5秒毎
    }

    window.onload = inputCheck;
    // -->
    </script>
</head>
<body>
<form name="ajaxForm" onSubmit="return false">
<input type="text" value="a" name="requestText">
</form>
<div id="result"></div>
</body>
</html>

2012年10月11日木曜日

WEBアプリケーションサーバの構築(4) AJAX

フォームにAJAXを使った画面を作成.

xmlhttp.js
// HTTP通信用、共通関数
function createXMLHttpRequest(cbFunc){
 var XMLhttpObject = null;
 try{
  XMLhttpObject = new XMLHttpRequest();
 }catch(e){
  try{
   XMLhttpObject = new ActiveXObject("Msxml2.XMLHTTP");
  }catch(e){
   try{
    XMLhttpObject = new ActiveXObject("Microsoft.XMLHTTP");
   }catch(e){
    return null;
   }
  }
 }
 if (XMLhttpObject) XMLhttpObject.onreadystatechange = cbFunc;
 return XMLhttpObject;
}
 
// document.getElementById
function $(tagId){
 return document.getElementById(tagId);
}

backend.php
<?php
 $db_user  = "[user name]";
 $db_password = "[password]";
 $db_name = "[database name]";
 $db_host  = "localhost";

//create xml
    header('Content-type: text/xml; charset=utf-8');
    echo '<?xml version="1.0"?><sa>';

 $search_key = null;

 if(isset($_GET['search_key'])) {
  $search_key = $_GET['search_key'];

  $con = mysql_connect($db_host,$db_user,$db_password) or die("error!");
  mysql_select_db($db_name,$con) or die("DB is not exist");
  $strsql = "SET CHARACTER SET UTF8";
  mysql_query($strsql,$con);
  $strsql = "SELECT id, num, name FROM sa2012 WHERE name LIKE '%".$search_key."%';";
  $res = mysql_query($strsql,$con);

  while ($item = mysql_fetch_array($res)) {
   print "<list><id>".$item[0]."</id><num>".$item[1]."</num><name>".$item[2]."</name></list>";
  }
  mysql_close($con);
    }

    echo '</sa>'; 
?>

list4.html
<html>
<head>
    <meta http-equiv=content-type content="text/html; charset=UTF-8">
 <title>real-time search sample(AJAX)</title>
 
 <STYLE TYPE="text/css">
 <!--
 .table1 {
  width: 400px;
  border-collapse: collapse;
  border: 1px #708090 solid;
 }
 .table1 TD {
  border: 1px #708090 solid;
 }
 -->
 </STYLE> 
 
    <script type="text/javascript" src="xmlhttp.js"></script>
    <script type="text/javascript">
    <!--
    findText = findTextOld = "";

    function loadXmlFile(fName){
        httpObj = createXMLHttpRequest(displayData);
        if (httpObj){
            httpObj.open("GET",fName,true);
            httpObj.send(null);
        }
    }

    function displayData(){
        if ((httpObj.readyState == 4) && (httpObj.status == 200)){
            xmlData = httpObj.responseXML;
            $("result").innerHTML = parseXmlData(httpObj.responseText);
        }else{
            $("result").innerHTML = "Loading ...";
        }
    }

    function parseXmlData(xmlData){
        $("result").innerHTML = xmlData;
        idListTags = document.getElementsByTagName("id");
        numListTags = document.getElementsByTagName("num");
        nameListTags = document.getElementsByTagName("name");
        idLen = idListTags.length;

        resultText = "<table class='table1'><tr><th colspan=4>list</th></tr><tr><td><b>id</b></td><td><b>num</b></td><td><b>name</b></td></tr>";
        for(i=0; i<idLen; i++){
            id = idListTags[i].childNodes[0].nodeValue;
            num = numListTags[i].childNodes[0].nodeValue;
            name = nameListTags[i].childNodes[0].nodeValue;
            str = name.match(findText);
            if (str){
                resultText += "<tr><td>" + id + "</td><td><a href='http://10.2.5." + num + "' target='_blank'>" + num + "</a></td><td>" + name + "</td></tr>";
            }
        }
        resultText += "</table>";
        return resultText;
    }

    function inputCheck(){
        findText = document.ajaxForm.requestText.value;
        if (findText != findTextOld) {
            str_search = "./backend.php?search_key=" + findText
            loadXmlFile(str_search);
            findTextOld = findText;
        }else{
//            $("result").innerHTML = "Loading ...";
        }
        setTimeout(" inputCheck()",500); // 0.5秒毎
    }

    window.onload = inputCheck;
    // -->
    </script>
</head>
<body>
<form name="ajaxForm" onSubmit="return false">
<input type="text" value="s" name="requestText">
</form>
<div id="result"></div>
</body>
</html>