- PR -

VBでCSV読み込み & 書き出しの処理速度向上について

投稿者投稿内容
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2007-05-15 14:04
ちょっと勘違いしていたかもしれません。
最初は単に日付が一項目でスラッシュ区切りになっているのを、年月日で
分けて CSV ファイルにしたいのかと思っていましたが、どうも違うみたい
ですね。

5/15/2007,10,1,2



2007,5,15,10,1,2

のように変換したい、という話でしょうか。
だとすると、こんな感じで。
# なんかコメントも間違ってたのでえらく解析に苦労した気が。

コード:

    temp = Split(sr1.ReadLine(), ",")
    Dim params As New List(Of String)
    spt = Split(temp(0), "/")   ' 年月日分解
    params.Add(spt(2))          ' 年
    params.Add(spt(0))          ' 月
    params.Add(spt(1))          ' 日
    params.Add(temp(1))
    params.Add(temp(2))
    params.Add(temp(3))

    ' 取得結果を書き出し
    sw1.WriteLine(String.Join(",", params.ToArray()))


_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
うにくま
ベテラン
会議室デビュー日: 2005/11/05
投稿数: 82
投稿日時: 2007-05-15 15:02
変数sdを使用しないという前提で作成してみました。
ほぼ同スペックのパソコンでテストしてみましたが、2〜3秒程度で終了しました。

コード:
Dim temp() As String
Dim year As String
Dim month As String
Dim day As String
Dim reg As Regex = New Regex("/|,", RegexOptions.Compiled)

Dim sr1 As New System.IO.StreamReader("読み込みファイル名", System.Text.Encoding.Default)
Dim sw1 As New System.IO.StreamWriter("書き出しファイル名", False)
'ファイルの最後までループ 
Do Until sr1.Peek() = -1
    temp = reg.Split(sr1.ReadLine())

    year = temp(2)
    month = temp(1)
    day = temp(0)
    temp(0) = year '年 
    temp(1) = month '月 
    temp(2) = day '日 
    '取得結果を書き出し 
    sw1.WriteLine(String.Join(",", temp))
Loop
sr1.Close() 'ファイルを閉じる 
sw1.Close()

七誌
会議室デビュー日: 2007/05/15
投稿数: 2
投稿日時: 2007-05-15 15:34
皆様ご指摘ありがとうございます。

ぽぴ王子さんの第1回答を参考にし、以下のようにプログラムを書き直した所、
2,3秒程で希望通りのデータを得る事ができるようになりました。ありがとうございます。ちなみに皆様のご指摘通り変数sdはワークとして用いておりました。配列として
いたのは、完全に私自身のデータ型選択誤りです。

***変更点***

'ファイルの最後までループ
n = 0
Do Until sr1.Peek() = -1
temp = Split(sr1.ReadLine(), ",")
Dim params As New List(Of String)
params.AddRange(Split(temp(0), "/")) ' 年月日分解
params.Add(temp(1))
params.Add(temp(2))
params.Add(temp(3))
'取得結果を確認の為に表示
sw1.WriteLine(String.Join(",", params.ToArray()))

n += 1
Loop


VBはまだかじった程度ですが、適切なデータ型を選択する事でここまで結果に
変化がでるものなのかと驚いています。本当にありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)