プロが教える店舗&オフィスのセキュリティ対策術

Accessプロたちへ

(質問)
1フィールドにスペースで区切られた文字が4つ存在します。
この1フィールドをスペース区切りで4つに分割する方法を教えて下さい。

(質問詳細)
1)dir /s の出力結果のファイルがあります。
2)そのデータをスペース区切りなしでインポートします。
3)2フィール目が、以下のようになります。
2008/12/12 12:29 221 aaa.txt
2008/12/14 13:56 235 bbb.txt
2008/12/11 12:30 151 ccc.txt
2008/12/11 12:30 151 ddd.txt
2008/12/11 12:30 151 eee.txt
2008/12/11 12:30 151 fff.txt
2008/12/11 12:30 151 ggg.txt

 これをアクセスで取り込んで、以下のようにしたいのです。

  フィールド1 フィールド2 フィールド3 フィールド4
  2008/12/12  12:29     221     aaa.txt

2行目以降も同様です。

尚、上記のことを教えてもらって、最終的に、やりたいことは、
2008/12/11のファイルの合計サイズを導きだすことです。
上記の方法でなくても特定の日のファイルの合計サイズを
今のままで出すことができるのであれば、そちらで教えていただいても
構いません。

よろしくお願いします。

因みに、
最初からスペース区切りでインポートすればよいではないかと思われるかもしれませんが、それができない状態なのです。
環境:Access2003

A 回答 (3件)

別にAccessのプロじゃなくても分かると思いますが・・・


それに丸投げは禁止されてますよ
なのでヒントだけ

Dirコマンドは固定長になっているはずなので
Mid関数で切れば出来るでしょう

SELECT Mid(LIST_REC,1,10) AS 作成日,
Mid(LIST_REC,13,5) AS 作成時刻,
CInt(Mid(LIST_REC,19,17)) AS サイズ,
Mid(LIST_REC,37) AS ファイル名
FROM DIR_LIST
WHERE Mid(LIST_REC,5,1) = "/"
AND Mid(LIST_REC,22,5) <> "DIR"

後は作成日を選択するかグループ化してSumなりCountで加工してね
尚、Accessで検証してませんのでSQLにエラーがあるかもしれません
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。

丸投げ禁止だったんですね。
ルール違反でした。以後、気をつけます。

素人なので、多分時間かかると思いますが
試してみます。

お礼日時:2008/12/16 21:54

あ!、CIntじゃ桁あふれするでしょうね CLngですね


でも、CLngでも2GBくらいまでしか出せません
巨大ファイルを扱うなら数値変換の型は考えたほうが良いでしょうね

追記
DIR /Sでは<DIR>以外にもルート名や余白もあるのでこれらを除く方法を考えないと数値変換でエラーを起こすでしょう
そのへんの考慮も
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。

巨大ファイルといえるかわかりませんが、
800万レコードあります。

試してみます。

お礼日時:2008/12/16 21:57

標準モジュールに以下のコードを作成します。



Option Explicit
Dim RegExp
Function Part(ByVal Data, ByVal Idx As Long)
Dim Ary
If IsEmpty(RegExp) Then
  Set RegExp = CreateObject("VBScript.RegExp")
  RegExp.Global = True
  RegExp.Pattern = "\s+"
End If
Ary = Split(RegExp.Replace(Data, vbTab), vbTab)
Select Case Idx
  Case 0, 1: Part = CDate(Ary(Idx))
  Case 2: Part = CLng(Ary(2))
  Case 3: Part = Ary(3)
End Select
End Function

SQLは以下の通り。
SELECT Part(フィールド,0) AS 日付,Part(フィールド,1) AS 時刻,
Part(フィールド,2) AS サイズ,Part(フィールド,3) AS 名前 FROM ~

区切り文字がタブだったり、各行の文字数が不特定な場合でも使用
できます。また、VBのSplitと異なり、連続した区切り文字は1文字
として扱うので、区切り文字数を気にする必要もありません。
尚、日付と時刻は日付型、サイズは長整数、名前は文字型です。
但し、項目の置かれる文字位置が絶対である場合はMidを使う方が
高速です。
    • good
    • 0
この回答へのお礼

ご丁寧な回答ありがとうございます。
試してみます。

お礼日時:2008/12/19 15:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A