[ TEXT読込み ] | dated 2012-10-3 Mori Design Office |
テキストファイルやcsvファイルを読込みます。 実行はここをクリック 対応ブラウザ: IE, Firefox. Google chrome, Opera。 文字コード切替え: shift-jis, utf-8 ここで、呼込み方法は下記の3通り。 @ FileAPI を用いる方法: ・対応ブラウザ:IE以外の殆ど総て。(IEはvar10で対応とのこと) ・ファイル指定方法:input type=file の操作、Firefox,Google ではドラッグ&ドロップも可能。 XMLHttpRequestと異なり、呼込み先ディレクトリの制約がない。サーバーアドレス有無に無関係。 ・対応エンコード:2種類切替え可能(shift-jis、utf-8)。 ・呼込み先が決まっている場合の自動読込みは、FileAPIでは不可能、従来方法(下記AB)がある。 A XMLHttpRequest を用いる方法:総てのブラウザに対応 ・ファイル指定方法:相対パスで指定、またはカレントディレクトリにある場合の ファイル名で指定。 input type=file の操作(ie以外はカレントディレクトリ内のみ可能)。区切り\を/に変換要。 IEで通常のアドレス(C:\・・ など)で、絶対パスのファイル名も可能 IEでサーバアドレス http://localhost/・・では、相対パス指定のみ可能。但しinput type=file の操作で取得できるのは fakepath/ファイル名 となり、事実上のカレントディレクトリ外では不可。 ・対応エンコード:utf-8のみ。Excelによるcsvファイルはshift-jisなので、日本語はボケる B fso を用いる方法: ・IEのみ対応、スクリップトは簡単。特にサーバーを必要としない。 ・ファイル指定方法:input type=file の操作、または 絶対パスのファイル名、区切り\を/に変換要。 サーバーApacheのアドレス http://localhost/・・でなく、C:/・・の絶対パスであることが必要。 ・対応エンコード:shift-jisのみ。 ☆ なお、Windows 8 API はここでは除外してますので、公式サイト参照。 →Microsoft: WL.download function 下記はそのソース、JavaScriptコード です。 |
<!DOCTYPE html> <html> <meta http-equiv="Content-Type" content="text/html,JavaScript,HTML5; charset=shift_jis"> <title>TEXT読込み</title> <script language="JavaScript"> <!-- // TEXTやcsv ファイルを読込む、3通りの方法から自動選択、 File API及びFSOを優先し、不適でXMLHttp とする。 // 文字エンコードの切替え( shift-jis、utf-8):File APIは可能、IEではFSOとXMLHttpの切替えによる。 var File; var $id = function(id) { return document.getElementById(id); } var Encode = "shift-jis"; var WindowFile = 0; window.onload = function(){ //イベント登録 var winF; doc = ""; if(window.File){ winF = 1;doc = "[ File API ]";//operaは参照クリックのみ可能 if(navigator.userAgent.toLowerCase().indexOf("opera")<0){ onload_FileAPI(); doc += " ドラッグ&ドロップ";} } if(document.all==null&&window.File==null){winF = 2;doc = "[ XMLHttp ] カレントディレクトリ内";} if(document.all){ winF = 3;doc = "[ FSO ]"; if(location.href.substr(0,5)=="http:"){winF = 4;doc = "[ XMLHttp ] カレントディレクトリ内";} } if(winF==2||winF==4){$id("en1").style.color = "gray"; encodeTy(2);} WindowFile = winF; $id("results").innerHTML = doc; }; // @ File API ------------------------------------------------------------------ function onload_FileAPI(){ $id("ta").addEventListener("dragover", onCancel, false); $id("ta").addEventListener("dragenter", onCancel, false); $id("ta").addEventListener("drop", onDropFile, false); //ドラッグアンドドロップ } var onCancel = function(e) { if(e.preventDefault) { e.preventDefault(); } return false; }; var onDropFile = function(e) { e.preventDefault(); File = e.dataTransfer.files[0]; readFile(File); $id("Ref").reset(); }; var readFile = function(file) { $id("f_name").innerHTML = file.name; // ファイル名を表示 var reader = new FileReader(); // Mozilla 規格のオブジェクト reader.onload = function(e) { main(e.target.result); }; // 読み出し reader["readAsText"](file, Encode); //なお、readAsText の他の方法 readAsArrayBuffer,readAsBinaryString,readAsDataURL }; function onChangeFile(){ if(WindowFile==1){file = $id("buttonRef").files[0]; readFile(file);}//File = e.target.files[0]; if(WindowFile==2){file = $id("buttonRef").files[0].name;XMLHttp(file );} if(WindowFile==3){//ie file = en($id("buttonRef").value); if(Encode=="shift-jis"){$id("results").innerHTML = "[ FSO ]"; FSO(file );} if(Encode=="utf-8"){$id("results").innerHTML = "[ XMLHttp ]"; XMLHttp(file );} } if(WindowFile==4){//ieアドレスhttp://localhost/・・ var sp = (en($id("buttonRef").value)).split( "/" ); file = sp[sp.length-2]; // データアドレスc:\fakepathなので相対パス不明 XMLHttp(file ); // 従ってデータファイルはカレントディレクトリにあるとする } if(WindowFile!=1){$id("f_name").innerHTML = file;} // 選択したファイル名を表示 File = file; //文字エンコード切替え用に 広域変数に代入 } // A XMLHttp ----------------------------------------------------------------- function XMLHttp(fileName ){ //ファイルにアクセスし受信内容を確認します var httpoj = createXMLHttpRequest(); httpoj.open( 'GET' , fileName , true ); httpoj.onreadystatechange = function() { httpSate(httpoj); } httpoj.send( null ); } function createXMLHttpRequest(){//XMLHttpRequestオブジェクト生成 if(window.ActiveXObject){ try {return new ActiveXObject("Msxml2.XMLHTTP"); } //(MSXML2以) catch (e) { try {return new ActiveXObject("Microsoft.XMLHTTP") }//Win ie用(旧MSXML) catch (e2) {return null} } } else if(window.XMLHttpRequest){return new XMLHttpRequest()} //Win ie以外 else {return null} } function httpSate(httpoj){//通信状態確後、結果出力 var disp = ""; var data,i,j,da,line; if ((httpoj.readyState == 4)){ data = httpoj.responseText; //[6] 通信テキスト文の取得 //cr = csvファイルのデータ区切り(改行コード)、da[i] = 取得データ var cr = String.fromCharCode(13); //又は cr = new RegExp("\r\n|\r|\n", "g","n"); line = data.split(cr); for (j=0; j<line.length; j++){ da = line[j].split(","); i = 0; disp += da[i]; for (i=1; i<da.length; i++){ disp += ","+da[i] ;} disp += cr; } } else{ disp = "<b>Loading...</b>";} main(disp); } // B FSO ------------------------------------------------------------------------ function FSO(fullFileName){ //ie 絶対パスのフルファイル名指定ではFSOを用いる、 var fso = new ActiveXObject("Scripting.FileSystemObject");//ASCIIフォーマットで読み込む var data = fso.OpenTextFile( fullFileName ,1,true); //読込み(http相対でエラー) var disp = ""; var i,j,da,line; while (!data.AtEndOfLine){ line = data.ReadLine(); da = line.split(","); i = 0; disp += da[i]; for (i=1; i<da.length; i++){ disp += ","+ da[i] ;} disp += "\n"; } data.Close(); main(disp); } // 共通------------------------------------------------------------------------ function en(o){ //円記号\をスラッシュに置換 var oo = o; var da,dt; var cr = String.fromCharCode(92); //円記号 da = oo.split(cr); dt = da.length-1; if(dt>0 ){ oo = da[0]; for (j=1; j<da.length; j++){oo += "/"+da[j];} } return oo; } function encodeTy(n){ //文字エンコード切替え表示、再作動 var c1,c2,c3,c4,cc; var nn = n; var winF = WindowFile; if(winF==2||winF==4){nn = 2;} if(nn==1){Encode = "shift-jis"; c1 = "yellow"; c2 = ""; c3 = "underline"; c4 ="none";} if(nn==2){Encode = "utf-8"; c2 = "yellow"; c1 = ""; c4 = "underline"; c3 ="none";} $id("en1").style.background = c1; $id("en2").style.background = c2; $id("en1").style.textDecoration = c3; $id("en2").style.textDecoration = c4; if(winF==3){ if(n==1){$id("results").innerHTML = "[ FSO ]";} if(n==2){$id("results").innerHTML = "[ XMLHttp ]";} } if(winF==1){if(File.name){readFile(File);}} if(File){ if(winF==2){XMLHttp(File);} if(winF==3){ if(n==1){FSO(File);} if(n==2){XMLHttp(File);} } if(winF==4){XMLHttp(File);} } } function main(data){ $id("ta").value = data;} //データ処理のメイン //--> </script><body style="margin-left:30px;line-height:25px"> <span id="results" style="color:green"></span><br> 文字エンコード: <a id="en1" href="JavaScript:onclick=encodeTy(1)" style="background:yellow;text-decoration:underline">shift-jis</a> <a id="en2" href="JavaScript:onclick=encodeTy(2)" style="text-decoration:none">utf-8</a><br> 読込みファイル名 : <span id="f_name">XXXXXX</span> <form id="Ref"><input id="buttonRef" onchange="onChangeFile()" type="file" size="100" style="width:574px"></form> <textarea id="ta" cols=70 rows=15 wrap="off" style="width:570px;height:300px"></textarea><br> <br> </body>