テキストファイルを1行ずつクリップボードにコピー

ウェブブラウザで動作します。テキストファイルを読み込むと1行ごとにコピーボタンが作成されクリックするとクリップボードにコピーできます。半自動化?

たとえばファイルのリネームとか一括でしてくれるソフトはありますし、同じようなことをはるかに便利にコピーできるソフトもあると思いますが、ブラウザで実行できたら便利だと思い作りました。

・対応しているファイル形式はUTF-8です。読み込んだファイルが文字化けしてしまう場合はフォーマットがUTF-8でない可能性があります。たとえばWindowsのメモ帳だと「ファイルを保存」するときにANSIとかShift-JISになっている部分ををUTF-8に変更してください。。

・別のファイルを選択するときはリセットのためページの再読み込みをしてください。

以下のソースをコピーしてhtmlファイルとして保存してください。

 

<html lang="ja">
    <head>
        <meta charset="UTF-8">
        <title> テキストファイルを1行ずつコピーする </title>
    </head>
    
    <body>
        <form name="test">
            <input type="file" id="file" >
            <input type="button" id="reset" value="注意書き" onclick=showNotes()>
            <input type="button" id="reset" value="リセット" onclick=location.reload()>
            <div id = "output"> </div>            <!--テキストとコピーボタンを表示するためのエリア-->
        </form>
        
        <!---------------- プログラム部分はここから ---------------->
        <script>
            //ファイルの中身を1行毎に収めた配列(グローバル)            
            var arrayOfContents;

            //ファイルが選択されたら一連の関数を呼び出す
            document.getElementById("file").addEventListener('change',readFile,false);

            //ファイルを読み込んで処理を始める
            function readFile(evt){

                var f = evt.target.files;
                var contents;

                var reader = new FileReader();
                reader.readAsText(f[0]);
                //ファイルが読み込まれたら
                reader.addEventListener("load",function(){
                    contents = reader.result;
                    //ファイルの中身を改行文字で区切る
                    arrayOfContents = contents.split(/\r\n|\r|\n/);
                    makeFields();
                    addEvents();
                },false);
            }

            //テキストフィールドとコピー用のボタンを作る関数
            function makeFields() {
                var output = document.getElementById('output');
                // リスト要素の作成
                var p = document.createElement('p');
                p.id = 'form';

                var i;
                var len = arrayOfContents.length;
                for ( i=0; i < len; i++) {
                    //テキストフィールドの作成
                    var text = document.createElement("input");
                    text.type = 'text';
                    text.id = 'text_' + i;
                    text.value = arrayOfContents[i];
                    p.appendChild(text);
                    // ボタンの作成
                    var input = document.createElement('input');
                    input.type = 'button';
                    input.id = 'btn_'  + i;
                    input.className = "btn";
                    input.value = (i+1) + "行目をコピー";
                    p.appendChild(input);
                    var br = document.createElement("br");
                    p.appendChild(br);
                }
                output.appendChild(p);
            }

            //隣のテキストをクリップボードにコピーする関数
            function copyText(n){
                document.getElementById("text_" + n ).select();
                document.execCommand("copy");
            }

            //イベントの設定
            function addEvents(){
                var buttons = document.getElementsByClassName("btn");
                var len = arrayOfContents.length;
                for (var j = 0;  j < len; j++) (function(n) {
                  buttons[n].addEventListener('click', function() {
                    copyText(n);
                  }, false);
                })(j);
            }
            //注意書きを表示
            function showNotes(){
                var notes = '使用上の注意・ファイルはUTF-8形式に変更してから使ってください';
                alert(notes);
            }

        </script>
        <!---------------- プログラム部分はここまで ---------------->
    </body>
<html>

```