スキー日記

スキーのことや日々のことをつれづれなるままに・・・

スポンサーサイト 

--年--月--日(--)

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
カテゴリ → スポンサー広告 | トラックバック(-) | コメント(-) |

スパゲッティ 

2010年04月05日(月)

最近ちょっと「javascript」に凝ってます。

IEなどで使用できるプログラム言語です。

ちょっと仕事でデータの書式を書き換えるのですが、簡単なんだけどめんどう。
面倒だから間違いやすいと負のスパイラルに入っている仕事があります。
それをパソコンで自動でやってもらうと楽だなと言うところか始まりです。

いつかは作ろうと思っていたのですが、2週間位前に重い腰が上がりました。
本当はプログラムを作る前にフローチャートをしっかり書かなければならないのですが、思い立ったところからプログラミングを始めてます。なのでプログラムに美しさはないし、変数の付け方なんてぐちゃぐちゃです。

とスキー場に向かう車の中で話していたらそんなプログラミングになんと名前があるらしい。
その名も
スパゲッティプログラム

だめなプログラミングの例らしい。。。
A型なのに、情けない。。。

まあ、しょうがないですなぁ。
ちょこっと作って、出来るようになるとどんどん要望が出てきて、あれもこれもとやっている内にぐちゃぐちゃになっちゃうんですよね。

そして、何とか完成したと思って他の人に使ってもらうと意外と出てくるバグ。バグフィックスでついにバージョン20まで来てしまいました。このまま行くとバージョン40まで行きそうです。

今日も帰ってから頑張ってしまいました。
多分これで完成したと思いますが。。。

また明日も修正したりして。


力作script↓↓↓
SCRIPT type=text/javascript
//2010.04.05 V18

// データがない行は削除するためのデータ読み込み
function reverse(){
output4 ='ID PPM1 PPM2 Multi #Hs J' + '\n';
var t2 = document.getElementById('outtext').value;
t2 = t2.replace(/\r/g,"");
t2 = t2.replace(/\n/g,"");
t2 = t2.replace(/ /g,"");
t2 = t2.replace(/ /g,"");
//MSデータ削除
if (t2.indexOf('MS',0) >= -1){
t2 = t2.split('MS(');
}
//数値データ取得
if (t2[0].indexOf(':') > -1){
pre = t2[0].split(':');
}
else if (t2[0].indexOf(':') > -1){
pre=t2[0].split(':');
}
else{
t3 = ' :' + t2[0];
pre=t3.split(':');
}
//溶媒データ取得
pre[0] = pre[0].replace(" ","");
if (pre[0] !=''){
if (pre[0].indexOf('(') > -1){
pre[0] = pre[0].split('(');
}
else if (pre[0].indexOf('(') > -1){
pre[0] = pre[0].split('(');
}
if (pre[0][1].indexOf(')') > -1){
pre[0][1] = pre[0][1].split(')');
}
else if (pre[0][1].indexOf(')') > -1){
pre[0][1] = pre[0][1].split(')');
}
output4 ='ID PPM1 PPM2 Multi #Hs J' + '\t' + pre[0][1][0] + '\n';
}
//各成分の分割
pre[1]=pre[1].split(')');
for (i = 0; pre[1][i]; i++) {
if (pre[1][i].match(/^,/)){
pre[1][i] = pre[1][i].replace(",","");
}
//ピーク値との分割
if (pre[1][i].indexOf('(',0) >= 0) {
pre[1][i] = pre[1][i].split('(');
}
//ピーク値の分割
if (pre[1][i][0] != '') {
if (pre[1][i][0].indexOf('-', 0) >= 0) {
pre[1][i][0] = pre[1][i][0].split('-')
}
else {
pre[1][i][0] = pre[1][i][0] + '@';
pre[1][i][0] = pre[1][i][0].split('@')
}
}
//Jの分割
if (pre[1][i][1].length > 3){
if (pre[1][i][1].indexOf('J', 0) >= 0){
pre[1][i][1]=pre[1][i][1].split(',J=');
pre[1][i][1][1] = pre[1][i][1][1].replace('Hz','');
}
else {
pre[1][i][1] = pre[1][i][1] + '@';
pre[1][i][1]=pre[1][i][1].split('@')
}
}
//HとMultiの分割
  pre[1][i][1][0] = pre[1][i][1][0].split(',');
if (pre[1][i][1][0][0].indexOf('H') >= 0){
temp3 = pre[1][i][1][0][0].replace('H','');
pre[1][i][1][0][0] = pre[1][i][1][0][1];
pre[1][i][1][0][1] = temp3;
}
else {

pre[1][i][1][0][1] = pre[1][i][1][0][1].replace('H','');
}
//データ結合

output4 +=[i+1] + '\t' + pre[1][i][0][0] + '\t' + pre[1][i][0][1] + '\t' + pre[1][i][1][0][0] + '\t' + pre[1][i][1][0][1] + '\t' + pre[1][i][1][1] + '\n';
}
prea = output4.split('\n');
document.getElementById('intext').value = output4;
document.Form1.intext.rows = prea.length;

}

function change(){
//ラジオボックス読み込み
for (var i = 0; i < document.Form1.sol.length; i++)
if(document.Form1.sol[i].checked == true)
var soln = document.Form1.sol[i].value;
for (var i = 0; i < document.Form1.form.length; i++)
if(document.Form1.form[i].checked == true)
var formk = document.Form1.form[i].value;
for (var i = 0; i < document.Form1.seq.length; i++)
if (document.Form1.seq[i].checked == true)
var sortk = document.Form1.seq[i].value;
for (var i = 0; i < document.Form1.cous.length; i++)
if (document.Form1.cous[i].checked == true)
var cous = document.Form1.cous[i].value;
// データがない行は削除するためのデータ読み込み
var t1 = document.getElementById('intext').value;
var reca = t1.split(/\n/);
var soln3 = reca[0]
if (soln !=''){
output3 = soln3 ;
}
else{
output3 ='ID PPM1 PPM2 Multi #Hs J' + '\n';
}
for (i = 0; reca[i]; i++) {
if (reca[i].match(/^[^0-9a-zA-Z]/)) { // 1行目が'数字以外'で始まるなら
delete reca[i]; // 配列から1行目のデータを削除
}
else {
if ((reca[i].match('^[0-9a-zA-Z]')) && (reca[i].indexOf('\t') > 0)) {
reca[i] = reca[i].split('\t'); // TABで分割、列の配列化
}
else
if (reca[i].match('^[0-9a-zA-Z]')) {
reca[i] = reca[i].split(' ');
}
reca[i][1] = reca[i][1].replace(/ /g, '');
if (reca[i][1].match('^[0-9]')) {
output3 += reca[i][0] + '\t' + reca[i][1] + '\t' + reca[i][2] + '\t' + reca[i][3] + '\t' + reca[i][4] + '\t' + reca[i][5] + '\n';
}
}
}
document.getElementById('intext').value = output3;
// きれいになったデータでデータ読み込み
var t1 = document.getElementById('intext').value;
var rec = t1.split(/\n/); // 改行で分割、行の配列化
if(rec[0].match(/^[^0-9]/)) { // 1行目が'数字以外'で始まるなら
rec.shift(); // 配列から1行目のデータを削除
}
for(i=0;rec[i];i++) {
rec[i]=rec[i].split('\t'); // TABで分割、列の配列化
// PPM1とPPM2の並び替え
rec[i][2] = rec[i][2].replace(/ /g,'');
if(((rec[i][2] !='') && (sortk.match('H')) && (rec[i][1] < rec[i][2])) || ((rec[i][2] !='') && (sortk.match('L')) && (rec[i][1] > rec[i][2]))){ // B列があれば A列と比較、入れ替え
var temp = rec[i][1];
rec[i][1] = rec[i][2];
rec[i][2] = temp;
}
}
// 並び替え
if(sortk.match('H')){
rec.sort(function(a,b){return b[1]-a[1]})}
else{
rec.sort(function(a,b){return a[1]-b[1]})};
// データ修正機能
for (i = 0; rec[i]; i++) {
rec[i][6] = '';
//カップリング定数並び替え
rec[i][5] = rec[i][5].replace(/ /g,'');
rec[i][5] = rec[i][5].replace("\n","");
rec[i][5] = rec[i][5].replace("\r","");
if (rec[i][5].indexOf(',')>0) {
rec[i][5] = rec[i][5].split(',');
if (cous.match('CH')) {
rec[i][5].sort().reverse();
}
else if(cous.match('CL')){
rec[i][5].sort();
}
var coup ='';
for (l = 0; rec[i][5][l]; l++) {
if (rec[i][5][l].match(/\w/)) {
if(coup !=''){
if((formk.match('1')) || (formk.match('3'))){
coup +=',';
}
else if((formk.match('2')) || (formk.match('4'))){
coup +=', ';
}
}
coup += rec[i][5][l];
}
}
rec[i][5] = coup;
}
// s追記機能
if ((rec[i][2] == '') && (rec[i][3] == '') && (rec[i][5] == '')) {
rec[i][3] = 's'
rec[i][6] = 's追記。'
}
// m追記機能
if ((rec[i][2] != '') && (rec[i][3] == '')) {
rec[i][3] = 'm'
rec[i][6] += 'm追記。'
}
// 表記チェック(m)
if((rec[i][3].match('m')) && (rec[i][2] =='')){
rec[i][6] += 'm表記に誤りがあります。';
}
if ((rec[i][3] != 'm') && (rec[i][2] != '')) {
rec[i][6] += 'm表記に誤りがあります。';
}
// 表記チェック(s)
if ((rec[i][3] == 's') && (rec[i][2] != '')) {
rec[i][6] += 's表記に誤りがあります。';
}
// 表記チェック カップリング定数がない(d,t)
if (rec[i][5]) {
if (((rec[i][3].match('t')) || (rec[i][3].match('d')) || (rec[i][3].match('q'))) && (rec[i][5] == '')) {
rec[i][6] += 'カップリング表記に間違いがあります。';
}
}
// 表記チェック カップリングなのに(s,m)
if (((rec[i][3].match('s')) || (rec[i][3].match('m'))) && (rec[i][5])) {
rec[i][6] += 'カップリング表記に間違いがあります。';
}
// 表記チェック Multi記載なし
rec[i][3] = rec[i][3].replace(/ /g,'');
if(rec[i][3] ==""){
rec[i][6] += 'カップリング表記がありません。';
}
// ピーク重なりチェック(s,m)
if (rec[0][1] < rec[1][1]) {
if (rec[i + 1]) {
if ((rec[i][2]) > (rec[i + 1][1])) {
rec[i][6] += 'ピークが重なっています。';
}
}
}
else{
if (rec[i + 1]) {
if ((rec[i][1]) < (rec[i + 1][2])) {
rec[i][6] += 'ピークが重なっています。';
}
}
}
}
// 以下、結果出力1
var output2 = t1.split(/\n/);
output2 = output2[0];
for(i=0;rec[i];i++){
output2 += [i+1] + '\t' + rec[i][1] + '\t' + rec[i][2] + '\t' + rec[i][3] + '\t' + rec[i][4];
if(rec[i][6]){
output2 += '\t' + rec[i][5] + '\t' + rec[i][6] + '\n';
}
else {
output2 += '\t' + rec[i][5] + '\n';
}
}
document.getElementById('intext').value = output2;
// 結果表示
var output = '';
// form1の場合
if(formk.match('1')){
for(i=0;rec[i];i++) {
output += rec[i][1];
if(rec[i][2] != "") {
output += '-'+rec[i][2];
}
output += '('+rec[i][4]+'H, '+rec[i][3];
if(rec[i][5]) {
if(rec[i][5] !='') {
output += ', '+'J='+rec[i][5]+'Hz';
}
}
output += ')';
if(rec[i+1]) {
output += ', ';
}
}
}
// form2の場合
else if(formk.match('2')){
for(i=0;rec[i];i++) {
output += rec[i][1];
if(rec[i][2] != "") {
output += '-'+rec[i][2];
}
output += ' ('+rec[i][4]+'H, '+rec[i][3];
if(rec[i][5]) {
if(rec[i][5] !='') {
output += ', '+'J='+rec[i][5]+'Hz';
}
}
output += ')';
if(rec[i+1]) {
output += ', ';
}
}
}
// form3の場合
else if(formk.match('3')){
for(i=0;rec[i];i++) {
output += rec[i][1];
if(rec[i][2] != "") {
output += '-'+rec[i][2];
}
output += '('+rec[i][3]+', '+rec[i][4]+'H';
if(rec[i][5]) {
if(rec[i][5] !='') {
output += ', '+'J='+rec[i][5]+'Hz';
}
}
output += ')';
if(rec[i+1]) {
output += ', ';
}
}
}
// form4の場合
else if(formk.match('4')){
for(i=0;rec[i];i++) {
output += rec[i][1];
if(rec[i][2] != "") {
output += '-'+rec[i][2];
}
output += ' ('+rec[i][3]+', '+rec[i][4]+'H';
if(rec[i][5]) {
if(rec[i][5] !='') {
output += ', '+'J='+rec[i][5]+'Hz';
}
}
output += ')';
if(rec[i+1]) {
output += ', ';
}
}
}
while(output.indexOf("\r",0) >= 0 || output.indexOf("\n",0) >= 0){
output = output.replace("\r","");
output = output.replace("\n","");}
if (document.Form1.MS.checked){
output = soln + output + '\r' + '\r' + 'MS(ESI, m/z) :';
}
else {
output = soln + output;
}
document.getElementById('outtext').value = output;
document.Form1.intext.rows = rec.length +2;
clipboardData.setData("Text",output);
}
スポンサーサイト

コメント一覧

comment list

記事のトップへ













管理者にだけ表示

記事のトップへ

トラックバック

trackback list

トラックバックURL↓
http://shioski.blog101.fc2.com/tb.php/1532-bbdac3b9

記事のトップへ

| ホーム |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。