2018年7月18日 星期三

Java 一些應用 [ csv reader / array of class / for( : ) ]

分享一些工作上用到的寫法 ( java )


  1.  csv reader 
  2. array of class
  3. for (:) 

因為工作上需要讀取csv檔案的需求 , java 本身有提供一些 method 
首先要 import opencsv-3.8.jar 檔案(我當時是3.8版本的)

讀取檔案路徑:                                                                                                              
                m_csvFile=""; //file path                                                                                
                                                                                                                        
//Chose CSV File                                                                                            
JFileChooser fileChooser = new JFileChooser();                                           
int returnValue = fileChooser.showOpenDialog(null);                                    
if (returnValue == JFileChooser.APPROVE_OPTION){                                
File selectedFile = fileChooser.getSelectedFile();                                   
m_csvFile = selectedFile.getPath();                                                         
}else{                                                                                                               
// error handle...                                                                                       
}                                                                                                                       
return true;                                                                                                       
接著呼叫 CSVReader 物件:                                                                                           
                reader = new CSVReader(new FileReader(m_csvFile));                               
                                                                                                                                        
                // Reading All Records at once into a List<String[]>                                     
        List<String[]> records= reader.readAll(); //讀取csv資料到list裡面             
        reader.close();                                                                                                   
                // records.size() 就是讀取到 csv 所有筆數                                                    
        SpcData spcAry[] = new SpcData[records.size()];  //宣告 array of class       
                                                                                                                                         
for ( string[] csvRecord : records ) 的用法: records 陣列中,從第一個值取到最後一個值 
         for (String[] csvRecord records) {                                                                       
        spcAry[count] = new SpcData();                                                            
        spcAry[count].sht_id csvRecord [0];                                                     
        spcAry[count].mes_id csvRecord [1];                                                     
        spcAry[count].data_id csvRecord [2];                                                     
        spcAry[count].data_group= csvRecord [3];                                                   
        spcAry[count].data_attr = csvRecord [4];                                                      
        spcAry[count].u_spec csvRecord [5];                                                     
           spcAry[count].l_spec csvRecord [6];                                                     
        spcAry[count].data_value= csvRecord [7];                                                   
        count++;                                                                                                 
        }                                                                                                                       
                                                                                                                                 
SpcData 的 Class:                  
          private class SpcData { 
String sht_id;          
String mes_id;        
String data_id;       
String data_group; 
String data_attr;     
String l_spec;         
String u_spec;        
String data_value;  
}                                     

CSV Reader 參考網頁: https://www.callicoder.com/java-read-write-csv-file-opencs

2018年7月13日 星期五

利用excel 組 Oracle 語法

PMS_CHKLABEL

資料:

語法:


利用 excel 函數 (有日期格式)

=CONCATENATE("INSERT INTO PMS_CHKLABEL VALUES('",A2,"','",B2,"',TO_DATE('" & C2 & "', 'yyyy-mm-dd'),'",D2,"','",E2,"');")


PMS_CHK_ITEM

資料:


語法:





利用 excel 函數 (有日期格式)
=CONCATENATE("INSERT INTO PMS_CHKITEM VALUES('",A8,"','",B8,"','",C8,"','",D8,"','",E8,"','",F8,"');")



2018年7月5日 星期四

Oracle REGEXP_SUBSTR 用法

REGEXP_SUBSTR 寫法如下: 

REGEXP_SUBSTRDATA_GROUP , '   [ ^ _ ]   { 7 }  '  )
DATA_GROUP  : 欄位
 [ ^ _ ]       : 中括號裡面,^後的字元 = 停止字元,這表示(遇到 底線 就停止)
{ 7 }          : 取 7 個字元 
{ m }         : 取 m 個字元
{ m , }       : 最少取 m 個字元
{ m ,  n}    : 最少取 m 個字元 , 最多取 n 個字元


假設今天我們資料長這樣 ,
我們要擷取DATA_ATTR是"C"  的條件中
EQU_Mooney 其中的 Mooney 當作之後對應的數值
EQU_gravity(BC) gravity(BC) 
= > 簡單來說就是取底線之後字串


如此就有我們想要的結果了



2018.07.05 備註: 
單獨使用 REGEXP_SUBSTR 抓字串顯示的話 , 是不會有什麼問題
如果要再把 REGEXP_SUBSTR 抓出來的字串做額外判斷 ex: like 
要注意後面他會補空白哦
因此要使用 TRIM 函數把空白清掉

情境如下: 
原本 TABLE 資料表










使用者只想要 DATA_ATTR為 "F" 的資料 , 並且要多機台欄位
而他的機台就是要去抓 DATA_ATTR為 "C" 去補

使用者想要呈現的樣子
語法如下 
ORACLE 要利用 | | 連接 字串 , TRIM 要去掉空白

結果



2018年6月27日 星期三

2018年6月22日 星期五

notepad ++ 喜歡的配色


Notepad ++ 喜歡的配色 , 以cpp為例子

方法一: 懶人方法

(1) 設定 -> 設定程式語言格式 -> 主題選取(選擇 Monokai) 
(2) 在安裝目錄資料夾底下   %APPDATA%\Notepad++   打開 stylers.model.xml
(3) 開啟 stylers.model.xml 尋找 c ++ 關鍵字
(4) 把這些覆蓋過去

<LexerType name="cpp" desc="C++" ext="">
            <WordsStyle name="PREPROCESSOR" styleID="9" fgColor="804000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
            <WordsStyle name="DEFAULT" styleID="11" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
            <WordsStyle name="INSTRUCTION WORD" styleID="5" fgColor="0000FF" bgColor="FFFFFF" fontName="" fontStyle="1" fontSize="" keywordClass="instre1" />
            <WordsStyle name="TYPE WORD" styleID="16" fgColor="8000FF" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" keywordClass="type1" />
            <WordsStyle name="NUMBER" styleID="4" fgColor="FF8000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
            <WordsStyle name="STRING" styleID="6" fgColor="808080" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
            <WordsStyle name="CHARACTER" styleID="7" fgColor="808080" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
            <WordsStyle name="OPERATOR" styleID="10" fgColor="000080" bgColor="FFFFFF" fontName="" fontStyle="1" fontSize="" />
            <WordsStyle name="VERBATIM" styleID="13" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
            <WordsStyle name="REGEX" styleID="14" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="1" fontSize="" />
            <WordsStyle name="COMMENT" styleID="1" fgColor="008000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
            <WordsStyle name="COMMENT LINE" styleID="2" fgColor="008000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
            <WordsStyle name="COMMENT DOC" styleID="3" fgColor="008080" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
            <WordsStyle name="COMMENT LINE DOC" styleID="15" fgColor="008080" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
            <WordsStyle name="COMMENT DOC KEYWORD" styleID="17" fgColor="008080" bgColor="FFFFFF" fontName="" fontStyle="1" fontSize="" />
            <WordsStyle name="COMMENT DOC KEYWORD ERROR" styleID="18" fgColor="008080" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
            <WordsStyle name="PREPROCESSOR COMMENT" styleID="23" fgColor="008000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
            <WordsStyle name="PREPROCESSOR COMMENT DOC" styleID="24" fgColor="008080" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
        </LexerType>

方法二:

(1) 設定 -> 設定程式語言格式 -> 主題選取(選擇 Monokai) 
(2) 左邊程式語言選擇 C++
(3) 樣式部分:
                        INSTRUCTION WORD: 字色修改成藍色(色調,濃度,亮度) = (140,240,142)
                        TYPE WORD: 字色修改成藍色(140,240,142)
                        NUMBER: 字色修改成藍色(140,240,142)
                        OPERATOR: 字色修改橘色(13,240,150)


2018年6月19日 星期二

移除討人厭的 dll 檔案

以下範例為 Notepad ++ 的 NppShell.dll 刪不掉

刪除指令如下:

(1) 先進到 Notepad ++ 目錄底下
(2) tasklist /m NppShell_06.dll
(3) 可以看到哪個 .exe 占用 NppShell_06.dll
(4) 發現 explorer.exe 檔案 ( 不能亂關 ) , 所以我們要下指令
(5) taskkill /f /PID 3268  (註: 3268是我畫面上的 PID)
(6) 此時桌面消失 , 不用緊張
(7) 重啟 explorer.exe 即可



2018年6月15日 星期五

C 語言 Strtok 用法與原理

程式碼:


















一開始的變數:







(1)   執行完 p = strtok(mailList, delim); , Strtok 會把 ; 的地方塞入 ‘\0’
可以把 mailList 想像成 hsiwei@kenda.com.tw \0 alexsie@kenda.com.tw
因為mailLisr 被填入\0
所以值那邊只會抓到 hsiwei@kenda.com.tw 但其實後面還有alexsie@kenda,com,tw
然後指標 p 會指向mailList的這塊記憶體位置

如下圖


(2) 因為p!=NULL 所以進入到 while迴圈, 接著執行 p = strtok(NULL, delim);
由於 ‘\0’就是 NULL , 所以指標pNULL開始往後找, 找到下一個 ; 為止

執行完後變數如下圖


用圖片來說明

2018年5月28日 星期一

[ ORACLE ] 顯示某Table 所有欄位語法

參考網站:
https://stackoverflow.com/questions/452464/how-can-i-get-column-names-from-a-table-in-oracle


記得 table_name 要大寫, ORACLE 很在意大小寫的 😃

SELECT table_name, column_name, data_type, data_length
FROM USER_TAB_COLUMNS
WHERE table_name = 'MYTABLE'
ORDER BY column_id

2018年5月25日 星期五

oracle insert into ( columns : timestamp )

insert into test values ( TO_TIMESTAMP('2018-05-25 18:18:18.333', 'YYYY-MM-DD HH24:MI:SS.FF') )

2018年5月17日 星期四

抓取Log關鍵字的好用軟體 - UnixLike

此範例是在遠端桌面Server(Q:\)裏頭的log
關鍵字是: "UPDATE PPT1D.AEQPTRESV SET LOT_ID='U111805160014'"


抓關鍵字語法:
grep + 要找的關鍵字  + Log存放路徑 + > 要寫到哪個路徑.檔案裡

grep "UPDATE PPT1D.AEQPTRESV SET LOT_ID='U111805160014'" Q:\prod\stdv14_ora_msmq\mes\aplog\kap02\*_2018-05-17*.log > c:\test.txt





2018年5月10日 星期四

Oracle In 多重欄位作法

如果遇到有多個欄位,要做查詢
一般來說我們的直覺會是這樣下

SELECT * FROM AEQPTRESV WHERE 1=1 AND (LOT_ID = 'U101804270010' AND NX_OPE_NO='090010')OR    (LOT_ID = 'U101804270009' AND NX_OPE_NO='090010')OR    (LOT_ID = 'U101804270007' AND NX_OPE_NO='090010').........

但是這種作法太耗費效能了, 於是突發奇想是否可以這樣抓

SELECT * FROM AEQPTRESV 
WHERE 1=1 
AND (LOT_ID , NX_OPE_NO) 
IN (
           ('U101804270010','090010'),
           ('U101804270009','090010'),
           ('U101804270007','090010')
)

後來發現竟然可以 😃😃😃
語法改成這樣下,不但畫面比較好看,效能也會比較好哦!!!

2018年4月17日 星期二

sublime 安裝 Rails​Base​16 Color Schemes

1. 開啟sublime, ctrl+shift+P, 輸入inst, 選第一個( Package Control )










2. 輸入RailsBase16 Color Schemes, 按下enter後開始安裝
3. 之後再 Preferencr -> clolor scheme 就可以選擇剛剛安裝好的主題

2017年11月13日 星期一

Java Connect Informix DB example

(1)   Import ifxjdbc.jar 
 
(2) import java.sql.*;
(3) 注意連線字串
(4) 範例程式

package hhh;
import java.sql.*;


public class hahah {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Connection conn = null;
    Statement statement = null;
    ResultSet resultSet = null;
    
    String dbURL = "jdbc:informix-sqli://Host:port/database name:informixserver=servername;"
                                    +  "DB_LOCALE=zh_tw.big5;user=帳號;password=密碼;";
                   
    try {
    //測試連線
    Class.forName("com.informix.jdbc.IfxDriver");
System.out.println("Driver OK");
conn =DriverManager.getConnection(dbURL);
System.out.println("connection OK");

Statement query = null;
ResultSet rs = null;
try
{
query = conn.createStatement();
rs = query.executeQuery("SELECT * FROM TableName WHERE 條件= 'xxx'");
while (rs.next())
{
System.out.println(rs.getString(0));
}
rs.close();
query.close();
catch (SQLException exce)
{
System.out.println("Caught: " + exce.getErrorCode());
}
conn.close();
    catch (ClassNotFoundException drvEx)
    {
    System.err.println("Could not load JDBC driver");
    System.out.println("Exception: " + drvEx);
    drvEx.printStackTrace();
    }
    catch(SQLException sqlEx)
    {
    while(sqlEx != null)
    {
    System.err.println("SQLException information");
    System.err.println("Error msg: " + sqlEx.getMessage());
    System.err.println("SQLSTATE: " + sqlEx.getSQLState());
    System.err.println("Error code: " + sqlEx.getErrorCode());
    sqlEx.printStackTrace();
    sqlEx=sqlEx.getNextException();
    }
    }
}
}

2016年8月11日 星期四

group by 超好用

假如同一個人的資料更新過 但是為了歷史紀錄而保留該筆資料
像是home_no = A101就有好幾筆 那我該如何select 不重複的呢?
利用 GROUP BY 吧

Select * From owner Where update_time In (Select Max(update_time) From owner Group By home_no)

從很多資 home_no 中抓出最新一筆的 home_no

2016年8月10日 星期三

SQL 用原本欄位(A,B,C) 來更新同個table 的新欄位

假設原本有 三個欄位 bid,no,floor 忽然要加入新的欄位 home_no (如圖一)

table : building
(圖一)



直接在SQL的編輯器地方輸入

UPDATE building SET home_no = CONCAT_WS(`no`,`bid`,`floor`) 
執行之後就可以看到 更新過後的結果了








2016年8月6日 星期六

[ 解決 ] CSV 匯入 mySQL出現亂碼

解決方法 直接看影片吧 ↓ 後來太開心想出問題 並弄成功 錄下影片紀錄
順便讓未來有遇到這個問題的人能夠快速地解決!
https://www.youtube.com/watch?v=ZAKumblON4E




最近的心得(可以忽略此段 單純想記錄生活的):

最近接了一個案子 雖然錢少得可憐 又要被扣8%的稅(FK 臭政府)
但因為83年要等當兵的緣故 , 也找不到合適的工作
彰化溪湖又是個偏僻的小地方 QQ 根本沒實習
只好硬著頭皮接下來
大概花了2個禮拜的時間去弄 嚴格來說應該也不到 哈哈
吃完午餐寫程式到傍晚 出門打球
吃完晚餐洗完澡 繼續寫 偶爾寫到1.2點 再去睡覺
越寫越有心得 也漸漸發現自己還是有很多地方不懂的
不過至少沒有白白浪費 等待兵單來的時間
頭腦不至於鏽掉 哈哈哈 發現自己邏輯還是有點不太縝密呢





2015年10月15日 星期四

【經驗談】FB-Status & Review

最近在跟潘老師一起合作一個案子
要使用 facebook 的帳號登入我們做的網頁

製作方法參考這個作者的
他寫的超棒 雖然FB一直更新 介面一直變
但還是不會差太多辣 XD
http://dgnzj.blogspot.tw/2012/08/facebookfacebook-partii.html

※切記
(1) 要用自己的網域 不可以用localhost 唷!
(2) 這個要打開其他帳號才可以用你寫的登入系統喔

2015年6月24日 星期三

PHP - mb_substr()

今天在公司用PHP程式來印出帳單時發生的問題
一開始寫法我是判斷字元的長度
可是如果遇到中英文混在一起的情況就會發生亂碼

好險老闆及時糾正我
叫我使用 PHP mb_substr()  這個好用的函式

mb_substr ( 要切割的字串 , 起始位置 , 切幾個字 , 編碼)

<?php $string="你好我是帥哥"; echo mb_substr( $string,0,2,"utf-8");?>

最後跑出來的結果就是「你好」這 2 個字囉!



2015年6月10日 星期三

刪除數據庫出錯:Can't rmdir errno 17

最近一直遇到local端(xampp)資料庫的資料遺失的問題
資料遺失就算了 他會連table2 都不讓你Drop掉

有用資料庫的人多少都會遇到這個問題(無法刪掉整個資料庫)

如果
使用phpmyadmin刪除,依然無法刪除,返回結果如下:
#1010 - Error dropping database (can't rmdir '.\test\', errno: 17) 

其實作法很簡單
開啟local端的純放mysql的地方
像我是用xampp
路徑為: C:\xampp\mysql\data\
進到裡面之後找到你的資料庫名稱 ex: abc
進到該資料夾內 砍到所有檔案 (前提是你要關掉apache跟MyDSQL才可以刪掉唷!)

希望能幫助到大家~

2015年4月9日 星期四

解決資料庫匯入造成windows自動轉換成小寫

-----------------------------------每日廢話-----------------------------------------
今天在公司實習的時候發現的問題
一開始還很開心把資料庫匯出然後在匯入到localhost裡面
仔細一看才發現好多 table 的名稱大寫都把我自動換成小寫...
看了超傻眼,那該死的windows....
只好自己帶著笨重的電腦回家爬文
----------------------------------------------------------------------------------------

簡單來說
Linux是對大小寫敏感的系統
但是Windows則是不敏感的系統,會把APP跟App認成同一個字。

匯出的資料庫, 若匯入Windows會被自動轉成小寫
解決方法如下

網路上是說修改
my.ini
而我把 my.ini 跟 my-default.ini 都

加這行

lower_case_table_names = 2

然後重新啟動MySQL Server
接著重新匯入一次資料庫即可解決

Java 一些應用 [ csv reader / array of class / for( : ) ]

分享一些工作上用到的寫法 ( java )  csv reader  array of class for (:)  因為工作上需要讀取csv檔案的需求 , java 本身有提供一些 method  首先要 import opencsv-3.8.jar ...