昔むかし、VB6が大流行しました
よくある話。
昔むかし、VB6で開発されたアプリがありましたとさ。
さすがにそろそろ使いにくくて我慢できなくなったユーザさんは、Javaに移行することにしました。
そのプロジェクトに居合わせたSE
でも、そのユーザさんは、あまりお金を掛けたくありません。だから、コンバータみたいな便利な変換ツールは買ってもらえませんでした。
可哀想なシンデレラは、来る日も来る日も、VB6の現行ソースを Javaの命令に置き換える作業をしていました。(本当は、ツールを買ったほうが安くあがるのにね)
あまりに機械的な置換作業が続いたので、秀丸マクロを作成してみました。下のソースをテキストファイルで保存して、秀丸マクロとして読み込めば、多分使えます。
というわけで、「なんちゃってVB6からJavaへのコンバータ・マクロ」です。
変換を支援するマクロですよ
当然ですが、変換したJavaっぽいファイルは、そのままじゃ動きません。
単純に、VB6 から Javaに変換する作業のとき、機械的に行える作業をマクロ化してまとめただけですので、ご注意ください。
どんどんやろう
でも、ずいぶん機械的な作業は軽減されるはずです。
愚痴っていても、コードは1行も埋まらない!
さぁ、手を動かそう!(あ、私のことか・・)
そして、みんな幸せになりましたとさ
今はこういう案件は随分少なくなりましたが、これからも、きっと時々こういう案件があるでしょう。 お疲れ様です。
これを使う人の残業時間が、1分でも縮まることを祈ります。じゃ、お先に失礼します〜
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
gofiletop; setcompatiblemode 0x0F; // 単純置換 begingroupundo; replaceallfast "if " , "if (" , nohilight; if( ! result ) beep; endgroupundo 1; begingroupundo; replaceallfast "then" , "){" , nohilight; if( ! result ) beep; endgroupundo 1; begingroupundo; replaceallfast "Else" , "} else {" , nohilight; if( ! result ) beep; endgroupundo 1; begingroupundo; replaceallfast "end if" , "}" , nohilight; if( ! result ) beep; endgroupundo 1; begingroupundo; replaceallfast "'" , "// " , nohilight; if( ! result ) beep; endgroupundo 1; begingroupundo; replaceallfast " True" , " true" , nohilight; if( ! result ) beep; endgroupundo 1; begingroupundo; replaceallfast " False" , " false" , nohilight; if( ! result ) beep; endgroupundo 1; begingroupundo; replaceallfast "Not " , "!" , nohilight; if( ! result ) beep; endgroupundo 1; // if文の条件修正 gofiletop; while(true){ searchdown"if ("; if(result){ selectline; replaceallfast " = " , " == " , inselect; selectline; replaceallfast " And " , " && " , inselect; selectline; replaceallfast " Or " , " || " , inselect; down 1; }else{ break; } } // Dim String の条件修正 gofiletop; while(true){ searchdown "Dim .*As String" , regular, nocasesense, hilight; if(result){ selectline; replaceallfast "As String" , ";" , inselect; selectline; replaceallfast "Dim " , "String " , inselect; }else{ break; } } // Dim Boolean の条件修正 gofiletop; while(true){ searchdown "Dim .*As Boolean" , regular, nocasesense, hilight; if(result){ selectline; replaceallfast "As Boolean" , ";" , inselect; selectline; replaceallfast "Dim " , "boolean " , inselect; }else{ break; } } // Dim Integer の条件修正 gofiletop; while(true){ searchdown "Dim .*As Integer" , regular, nocasesense, hilight; if(result){ selectline; replaceallfast "As Integer" , ";" , inselect; selectline; replaceallfast "Dim " , "int " , inselect; }else{ break; } } // Dim Long の条件修正 gofiletop; while(true){ searchdown "Dim .*As Long" , regular, nocasesense, hilight; if(result){ selectline; replaceallfast "As Long" , ";" , inselect; selectline; replaceallfast "Dim " , "long " , inselect; }else{ break; } } // Dim Single の条件修正 gofiletop; while(true){ searchdown "Dim .*As Single" , regular, nocasesense, hilight; if(result){ selectline; replaceallfast "As Single" , ";" , inselect; selectline; replaceallfast "Dim " , "float " , inselect; }else{ break; } } // Dim Double の条件修正 gofiletop; while(true){ searchdown "Dim .*As Double" , regular, nocasesense, hilight; if(result){ selectline; replaceallfast "As Double" , ";" , inselect; selectline; replaceallfast "Dim " , "double " , inselect; }else{ break; } } // 一旦全行にセミコロンを付ける replaceallfast "\\n" , ";\\n" , regular, nocasesense, nohilight; // { } の行からは外す replaceallfast "};\\n" , "}\\n" , regular, nocasesense, nohilight; replaceallfast "{;\\n" , "{\\n" , regular, nocasesense, nohilight; // 何もない行からも外す replaceallfast "^;" , "" , regular, nocasesense, nohilight; // 二重コメントを除去 replaceallfast "// //" , "//" , regular, nocasesense, nohilight; // スペースのみの行 replaceallfast "^ *;" , "" , regular, nocasesense, nohilight; // 二重セミコロンを除去 replaceallfast ";;" , ";" , regular, nocasesense, nohilight; |