人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

メールアドレスをドメイン名で並び替える方法はないでしょうか。
具体的にはaaa@bbb.com,aaa@ccc.com,aaa@aaa.comなら、aaa@aaa.com、aaa@bbb.com、aaa@ccc.comに並んでほしいのです。ツールで並び替えよりsqlやvbsのスクリプトでお願いします。

●質問者: kuruma_neko
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:AAA CCC SQL VBS スクリプト
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● thunder9119
●20ポイント

エクセルではダメでしょうか?

テキストに

aaa@bbb.com

aaa@ccc.com

aaa@aaa.com

と1行1行書いているものを、エクセルで読み込み。

読み込む時に「カンマやタブなどの区切り文字・・」を選択

区切り文字の「その他」にチェックをして@を入力

これで、ドメインを分離してエクセルに読み込めたので

エクセルの機能のデータの並べ替えでドメインごとに並べます。

並び替えたあと、元のテキストに戻すには

全てをコピーしてなんらかのテキストエディタに貼り付け、

タブ文字を@に置換すれば完成です。

かなり手間ですがこれしか思いつきませんでした・・

◎質問者からの返答

ありがとうございます。確認したところ、確かにうまく並び替えできました。しかし、担当者のPCスキルに依存しない運用を考えているため、基本的にバッチにして自動化したいと考えています。エクセルのマクロでもいけると思いますが、もうちょっと汎用的な方法を考えています。


2 ● bash0C7
●30ポイント

正規表現で@以降を取得し並び替えを行えばいいと思います。

メールアドレスの場合、@.* という正規表現で@とドメイン部分を抜き出せます。


例1:Oracle10gでHOGEテーブルのMAILADDRESSフィールドにメールアドレスが入っている場合のドメインで並び替えSQL

select * from HOGE order by REGEXP_SUBSTR(MAILADDRESS,'@.*'); --MAILADDRESSフィールドに格納している@以降の文字列を正規表現関数で取得し、並び替え条件としている


例2:VBSでMailAddress変数から@以降の文字列を取得

Set re = New RegExp '1.正規表現ライブラリのインスタンス作成

re.Pattern = "@.*" '2.@以降を取得するように指定

re.Execute(MailAddress).(1) '3.MailAddress変数から@以降の文字列を取得

◎質問者からの返答

SQLがわかりやすく簡単そうでいいですね。

問題はアクセスで動かないことかな・・・。


3 ● n_koji72
●10ポイント

Linuxならsortコマンドで一発なんですが...

初めの回答のように縦にアドレスが並んだテキストファイルをbefore.txtとすると,


$ sort -t'@' -k2,2 before.txt > after.txt


でソートされた結果がafter.txtに保存されます。

MacOSXでも同様のsortコマンドがあるはずです。


Windowsのコマンドプロンプトのsortでは無理なので,

Cygwinをインストールして上記sortが使えるようにする必要があります。

http://journal.mycom.co.jp/special/2002/cygwin/

一度インストールしておけば,

Windowsのバッチファイルからこのsortコマンドを

呼び出して使うことも可能だと思います。

◎質問者からの返答

Linuxは、小さなツールというかコマンドが便利という話は聞きますが、確かに便利そうですね。

現実問題として、ソートするために環境を入れるのはちょっと面倒っす。


4 ● takoratta
●10ポイント

Windowsのバッチコマンドでもできそうです。forとsortを組み合わせて。

@echo off

if "%1" == "" goto error

if "%2" == "" goto error

set tempfile=%temp%\domsorttemp.txt

if exist %tempfile% del %tempfile%

if not exist "%1" goto error

if exist "%2" del "%2"

for /f "usebackq delims=@ tokens=1,2" %%a in ("%1") do echo %%b %%a@%%b >> %tempfile%

for /f "tokens=2 " %%a in ('sort %tempfile%') do echo %%a >> "%2"

del %tempfile%

goto end

:error

echo 引数が足りません。または、入力ファイルがありません。

echo usage: domsort 入力ファイル 出力ファイル

:end

◎質問者からの返答

なるほど、DOSバッチという手もありますね。参考になりました。


5 ● たまご
●30ポイント ベストアンサー

VBScriptでもできますが、Excel VBAの方が良いかと思います。

MailAddress.txt

------------------------------

aaa@bbb.com

aaa@ccc.com

aaa@aaa.com

aaa@fff.com

aaa@eee.com

aaa@hhh.com

aaa@ggg.com

aaa@iii.com

aaa@ddd.com

------------------------------

Excel VBAコード

------------------------------------------------------------

Sub SortMailAddress()

Dim myFile As String

Dim myRow As Long

myFile = Application _

.GetOpenFilename("テキスト・ファイル(*.txt), *.txt")

Workbooks.Open (myFile)

With ActiveSheet

myRow = 1

Do Until .Cells(myRow, 1) = ""

.Cells(myRow, 2) = Mid(.Cells(myRow, 1), _

InStr(1, .Cells(myRow, 1), "@") + 1, _

Len(.Cells(myRow, 1)) - InStr(1, _

.Cells(myRow, 1), "@"))

myRow = myRow + 1

Loop

Columns("A:B").Sort Range("B1"), _

xlAscending, header:=xlNo

Columns("B").Delete

End With

End Sub

------------------------------------------------------------

Excelを起動させ、シートタブを右クリックし、「コードの表示」左クリックして、ツールバーの「挿入」の「標準モジュール」を左クリックして、上記のExcel VBAコードを右側の空白に貼り付けてください。

次に、ツールバーの「ファイル」の「終了」を左クリックしてください。

これで、ツールバーの「ツール」の「マクロ」の「マクロ」を左クリックし、「実行」ボタンを左クリックし、上記のテキスト・ファイルを選択し、「開く」ボタンを左クリックすれば、OKです。

とりあえず、私のPC環境では動きましたが、エラー処理はしていません。

Windows XP Pro. SP2

Excel 2000

◎質問者からの返答

モジュールにしておけば便利そうですね。ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ