2015年4月9日 星期四

[Java]取得所有健保藥局資料

健保藥局指的是健保特約藥局,可以持慢性處方去那裡拿藥,不必特地跑去醫院。


目前台灣約有六千家,(不能去拿處方簽的不算在內),比7-11還多。


首先,我們先取得所有醫事機構的檔案,再來做過濾,檔案在下列網址。

http://www.nhi.gov.tw/webdata/webdata.aspx?menu=18&menu_id=703&webdata_id=660























這裡的檔案不定時會更新,更新頻率大約在4-7天一次,寫這篇文時,是4月7日更新。

接著下載上圖中框起來的那個檔案。

之後解壓縮,進人到資料夾中 ,找到hospbsc.txt ,這個是我們要的,另一個zip沒用到。








接下來,我們把檔案打開來看一下,嗯~東西有點多,北七覺得睏惑。
























找到下面一點有個連結,也許有用























點進去一下,找到了特約類別代碼的中文意義,看來我只需要"5"。



























接下來,咱們用Java來示範怎麼處理這個hospbsc.txt 



 
package hospbsc;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author bert
 */
public class Hospbsc {

    public static void main(String[] args) {
        Hospbsc hp = new Hospbsc();
        hp.readFIle();
    }

    private void readFIle() {
        //讀檔
        File fr = null;
        //寫檔
        BufferedWriter writer = null;
        try {
            //讀取D:\hospbsc.txt
            fr = new File("d:\\hospbsc.txt");
            //這很行重要,一定要用Big5
            InputStreamReader read = 
                    new InputStreamReader(new FileInputStream(fr), "Big5");            
            BufferedReader br = new BufferedReader(read);

            //判斷是否為title行
            boolean title = false;
            String line = "";
            //寫入D:\Rx.txt
            File logFile = new File("D:\\Rx.txt");
            writer = new BufferedWriter(new FileWriter(logFile));
            //如果可以讀檔
            while (br.ready()) {
                //讀取一行
                line = br.readLine();
                //如果不是抬頭行
                if (title) {
                    String[] temp = line.split(",");
                    //如果分類是藥局則寫入資料
                    if (temp[6].equals("\"5\"")) {
                        writer.write(line + "\n");
                    }
                } else {
                    //寫入抬頭行
                    writer.write(line + "\n");
                }
                title = true;
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Hospbsc.class.getName()).
                    log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Hospbsc.class.getName()).
                    log(Level.SEVERE, null, ex);
        } finally {

        }
    }

}


執行後去開一下D:\Rx.txt,只有藥局了。


如果需要取其它種類的醫事機構,只需修改,例如改成取診所
 

if (temp[6].equals("\"4\""))


沒有留言:

張貼留言