• ベストアンサー

テキストデータを加工してDBで扱えるようにする方法

以下のような文字列をエクセルで扱える形にしたい と思っています 具体的にどのようにしたらいいでしょうか よろしくお願いします (説明) テキストエディタは秀丸を使っています perlはまだ使ったことがありませんが できるようであればインストールも考えています (データの特徴) Aフィールドがデータの最初に必ずあります 他のフィールドは任意です フィールドと値の区切りは最初のスペース群(1個以上)です 値の間にスペースがある場合もあります 実際は40フィールド、1万件ほどあります A 1 B  2 2 C 3 A 4 C   55 A 6 B 77 77 A 8 B 99 C  10 10 A  11 B 12 12 12 C 13 ↓ A,B,C 1,2 2,3 4,,55 6,77 77 8,99,10 10 11,12 12 12,13

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

  • ベストアンサー
回答No.5

ありゃ、だめだ。#2です。  ($alpha,$num) = (substr($_,0,1),substr($_,1)); この行を @ary = split(/\s/,$_); $alpha = shift(@ary); $num = substr($_,length($alpha)); に差し替えてください。

arumisoy
質問者

お礼

このたびは皆さんにお世話になりました。perlやVBA、秀丸のマクロを使いこなせるようになるには時間がかかりそうなのでここで締め切ります。ポイントはつけましたが同じくらいですのでご了承ください

その他の回答 (4)

回答No.4

#2です。 perlでやるとこんな感じです。 @fieldに実際のフィールド名を入れてください。 もちろん、VBAでもできると思います。 perlのほうがコード書くの楽なので perlでやっただけです。 @field = ("A","B","C"); for($i=0;$i<=$#field;$i++){  $hash{$field[$i]} = $i; } print join(",",@field); while(<>){  ($alpha,$num) = (substr($_,0,1),substr($_,1));  $num =~ s/^[\s ]+//;  $num =~ s/[\s ]+$//;  if($hash{$alpha} == 0){   print "\n$num";   $chk = 0;   next;  }else{if($hash{$alpha} == $chk){    print ",$num";   }else{    print "," x ($hash{$alpha} - $chk)."$num";   }  }  $chk++; }

arumisoy
質問者

お礼

ありがとうございます。perlをインストールしてみようと思います

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.3

> フィールドは26文字をこえていないです という事でなくて、例の場合はABCの3通りですが、 40通りの場合、ABCD…XYZの26通りの次の27~40通りまではどういう文字が来るのでしょう?という意味だと思います。 A~Zの文字は区別できなくなるし、数字もデータとの区切りが出来なくなりますね。 それとも、実際はアルファベット1文字でなくて単語みたいなもの? -- > 1万件×40行です って事は、40万行のテキストファイルですか? Excelの最大行数は6万5千行ですので、こちらに直接取り込むのは却下ですね。 -- テキストエディタの機能なんかでは辛そうですし、ExcelのVBAで読み込み処理を記述するのがコンパクトで楽かも。

arumisoy
質問者

お礼

ありがとうございます。 以下にも書きましたがおっしゃるように単語みたいなものです。 「ExcelのVBAで読み込み処理を記述」という方法を検討してみます

回答No.2

>実際は40フィールド、1万件ほどあります とありますが、 フィールド文字のアルファベットは 26文字ですよね。 その先はどうなってるんですか。

arumisoy
質問者

お礼

先のneKo_deuxさんのコメントで気がつきました フィールド名は1文字ではなく アルファベットと_を使っています たとえばABC_CD_E_FGのようなものです 失礼しました

arumisoy
質問者

補足

ありがとうございます。 フィールドは26文字をこえていないです 40通りのフィールドが終わるとその先は 2件目のデータがAフィールドから始まり 全部で1万件ほどとなっています (値のないフィールドもあるので最大で 1万件×40行です)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

とりあえず秀丸をお使いでしたら 1.正規表現で置換をおこない、A~Cと後続のスペースを削除する 検索:^[A-C] + 置換:何も入力しない *正規表現のところのチェックを忘れずに。意味はヘルプを 2.Shift+F1でこんなキー操作を記録する エンドキー カンマ デリート エンドキー カンマ デリート 下キー 3.カーソルをファイルの先頭に戻し、Shift+F2を押しっぱなしにする。 4.先頭行に、 A,B,C を追加する でいけるかな? この変換作業を何度もやるのであれば、これらの作業をすべて自動化する マクロを組んだほうが楽だと思いますが。

arumisoy
質問者

お礼

ありがとうございます。秀丸でShift+F1、Shift+F2の操作を したことがなかったのでトライしてみます。

関連するQ&A