• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:行列データ?の文字列操作についてです。)

行列データの文字列操作について

このQ&Aのポイント
  • 行列データの文字列操作について説明します。
  • 入力された行列データを特定の形式に変換する方法について説明します。
  • Excel VBAからJavaScriptに変換する方法についても考えています。

質問者が選んだベストアンサー

  • ベストアンサー
  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.4

splitでの対処は難しいのでsplitで行ごとに分割した後に1行目のデータを削除した方が楽そうです。 幸いJavascriptの配列のメソッドにはshiftというのがあります。 これは配列の先頭の要素削除して配列を一つ前に詰めます。 入力データに必ずA B ・・・という不要行があるなら無条件に、 不要行があるかどうかわからないなら判定してからshiftを実行。 if(rec[0].match(/^ID/)) { // 1行目が'ID'で始まるなら rec.shift(); // 配列から1行目のデータを削除 }

pikopiko29
質問者

お礼

ありがとうございます。 全て問題が解決しました。 何度も質問してしまい申し訳ありませんでした。 大変助かりました。

その他の回答 (3)

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.3

>ところでよろしければ「sort」の所も教えていただけないでしょうか 私が試した限りではIE8ではエラーとかなく動作しているんですよね。 正常にソートされた結果が出力されてます。 ブラウザのバージョンなのかサンプルデータの違いなのか、スクリプトがアレンジしてあってその影響なのかちょっとわからないです。 ただ、「数字を・・」というエラーなら a[1]-b[1] でのエラー→配列の1列目に数値以外が入ってきてしまっているためのエラーでしょうから、sortの直前にalertで表示するとか、sortを一旦削除してtextareaに書き出される内容を見て配列の状態を確認してみてはどうでしょうか? IE8ならスクリプトデバッガが付いてるので途中で止めて変数の中身を直接見てもいいし。

pikopiko29
質問者

お礼

現在IE6を使用しています。GoogleChromeで実行してみましたが、エラーは出ませんでした。 IE6でおこる問題のようです。 ですが、IE6でどうしても動かす必要があります。 >sortを一旦削除してtextareaに書き出される内容を見て・・・ 1行目の「A B C D E」が入ってしまっていて、このためにエラーになっているようです。 元のデータの1行目を削除したら問題なく実行できました。 このような場合、splitで1行目を読ませないような設定は出来るのでしょうか? たびたび申し訳ありませんが、よろしくお願いします。

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.2

#1です。掲載したサンプルはIEでは上手く動きませんでしたね。 rec[i]=rec[i].split(/\t/); // TABで分割、列の配列化 ↓ rec[i]=rec[i].split('\t'); // TABで分割、列の配列化 と、変更して試してみてください。 分割文字を正規表現で表わすと勝手に連続するものを一つと見なしてしまうIEの変わった仕様にやられてました。(/\t/が/\t+/みたいに解釈される) 結果、途中に値のない行では列がずれ込んで配列になってました。 まー、意味無く正規表現を使った私も悪いけど。

pikopiko29
質問者

お礼

>途中に値のない行では列がずれ込んで配列になってました。 確かにその様になってしまうことがあったので replaceを使って rec[i] = rec[i].replace(/\s\s/g," f ") などと記述してその後、fを削除するようにしていました。 「'\t'」のような表記は知りませんでした。 確かにこのようにすることで、問題がきれいに解決されました。 ところでよろしければ「sort」の所も教えていただけないでしょうか? IEで行っていますが、 rec.sort(function(a,b){return a[1]-b[1]}); の所で「数字を指定して下さい」とエラーが出てしまいます。 少しずつ勉強しているのですが、どうしても解決方法が分かりません。 よろしくお願いします。

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.1

可能だと思います。 Javascriptのリファレンスを見ながらがんばってください。http://www.tohoho-web.com/js/index.htm 以下はサンプルです。 <html> <head> <title></title> <script type="text/javascript"> function sample(){ var t1 = document.getElementById('intext').value; var rec = t1.split(/\n/); // 改行で分割、行の配列化 for(i=0;rec[i];i++) { rec[i]=rec[i].split(/\t/); // TABで分割、列の配列化 if(rec[i][2]) { // B列があれば A列と比較、入れ替え if(rec[i][1] > rec[i][2]) { var temp = rec[i][1]; rec[i][1] = rec[i][2]; rec[i][2] = temp; } } } rec.sort(function(a,b){return a[1]-b[1]});// 並び替え // 以下、結果出力 var output=''; for(i=0;rec[i];i++) { output += rec[i][1]; if(rec[i][2]) { output += '-'+rec[i][2]; } output += '('+rec[i][4]+', '+rec[i][3]; if(rec[i][5]) { output += ', '+rec[i][5]; } output += ')'; if(rec[i+1]) { output += ', '; } } document.getElementById('outtext').value = output; } </script> </head> <body> <p><textarea id="intext" cols="100"></textarea></p> <p><input type="button" value="実行" onclick="sample()"></p> <p><textarea id="outtext" cols="100"></textarea></p> </body> </html>

pikopiko29
質問者

お礼

早速ありがとうございました。 希望していたことがほとんど出来ました。 しかし、19行目のソート?の所だけはエラーが出てしまい上手く作動しませんでした。 ご紹介いただいたリファレンスを見ながら勉強したいと思います。 ありがとうございました。

関連するQ&A