- ベストアンサー
テキストデータを加工して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
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ありゃ、だめだ。#2です。 ($alpha,$num) = (substr($_,0,1),substr($_,1)); この行を @ary = split(/\s/,$_); $alpha = shift(@ary); $num = substr($_,length($alpha)); に差し替えてください。
その他の回答 (4)
- GuruGuru22
- ベストアンサー率51% (177/346)
#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++; }
お礼
ありがとうございます。perlをインストールしてみようと思います
- neKo_deux
- ベストアンサー率44% (5541/12319)
> フィールドは26文字をこえていないです という事でなくて、例の場合はABCの3通りですが、 40通りの場合、ABCD…XYZの26通りの次の27~40通りまではどういう文字が来るのでしょう?という意味だと思います。 A~Zの文字は区別できなくなるし、数字もデータとの区切りが出来なくなりますね。 それとも、実際はアルファベット1文字でなくて単語みたいなもの? -- > 1万件×40行です って事は、40万行のテキストファイルですか? Excelの最大行数は6万5千行ですので、こちらに直接取り込むのは却下ですね。 -- テキストエディタの機能なんかでは辛そうですし、ExcelのVBAで読み込み処理を記述するのがコンパクトで楽かも。
お礼
ありがとうございます。 以下にも書きましたがおっしゃるように単語みたいなものです。 「ExcelのVBAで読み込み処理を記述」という方法を検討してみます
- GuruGuru22
- ベストアンサー率51% (177/346)
>実際は40フィールド、1万件ほどあります とありますが、 フィールド文字のアルファベットは 26文字ですよね。 その先はどうなってるんですか。
お礼
先のneKo_deuxさんのコメントで気がつきました フィールド名は1文字ではなく アルファベットと_を使っています たとえばABC_CD_E_FGのようなものです 失礼しました
補足
ありがとうございます。 フィールドは26文字をこえていないです 40通りのフィールドが終わるとその先は 2件目のデータがAフィールドから始まり 全部で1万件ほどとなっています (値のないフィールドもあるので最大で 1万件×40行です)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
とりあえず秀丸をお使いでしたら 1.正規表現で置換をおこない、A~Cと後続のスペースを削除する 検索:^[A-C] + 置換:何も入力しない *正規表現のところのチェックを忘れずに。意味はヘルプを 2.Shift+F1でこんなキー操作を記録する エンドキー カンマ デリート エンドキー カンマ デリート 下キー 3.カーソルをファイルの先頭に戻し、Shift+F2を押しっぱなしにする。 4.先頭行に、 A,B,C を追加する でいけるかな? この変換作業を何度もやるのであれば、これらの作業をすべて自動化する マクロを組んだほうが楽だと思いますが。
お礼
ありがとうございます。秀丸でShift+F1、Shift+F2の操作を したことがなかったのでトライしてみます。
お礼
このたびは皆さんにお世話になりました。perlやVBA、秀丸のマクロを使いこなせるようになるには時間がかかりそうなのでここで締め切ります。ポイントはつけましたが同じくらいですのでご了承ください