tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルテキストファイルの分割
記事No8936
投稿日: 2009/05/13(Wed) 09:51
投稿者にっく

はじめまして、VB1ヶ月半の初心者です。
テキスト形式のファイルの分割という単純な操作の気がしますが、
1ヶ月近くはまり、病んでいます。

環境;VB2005
扱うデータ;text形式のファイル

1(改行)
2(改行)
3(改行)
・・・
9999(改行)
10000(改行)
END

一行づつ改行されたtextdataを

1 2 3 ・・・ 200(改行)
201 202 203・・・ 400(改行)
9801 9802 9803・・・ 10000(改行)
END

というようにスペースで区切り、一定の間隔で改行を入れたいのです。

下記のコードで、InStrとMid関数で改行位置を検索、スペースで連結、
することはできたのですが、指定位置(200個目のデータ等)を改行する
命令はどのようにすればよいのでしょうか。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button.Click
        Dim M As String, pt As Integer
        moto = Textbox1.Text & " "
        pt = 1    
        Do        
            pt = InStr(pt, M, vbCrLf)    
            If pt = 0 Then    
                Exit Do          
            End If
            M = Mid(M, 1, pt - 1) & " " & Mid(M, pt + 2)    
        Loop
        textbox2.text = M
    End Sub

textdataを配列に格納したりと色々試してはいるのですが、
結局目的を達成できずにいます。
また、この方法だと実行速度がかなり掛かってしまいそうで、
スムーズにできる方法があれば、
そちらもご教授のほどよろしく御願いいたします。

[ツリー表示へ]
タイトルRe: テキストファイルの分割
記事No8938
投稿日: 2009/05/13(Wed) 12:09
投稿者ダンボ
ヒントだけでいいですか?
10000個固定なのか?、とか、最後のENDはなんとかして、とか、ありますけれど

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim L() As String, M(199) As String, N(49) As String
        L = Split(TextBox1.Text, vbCrLf)
        For i As Integer = 0 To 49
            Array.Copy(L, i * 200, M, 0, 200)
            N(i) = Join(M, " ")
        Next
        TextBox2.Text = Join(N, vbCrLf)
    End Sub

[ツリー表示へ]
タイトルRe^2: テキストファイルの分割
記事No8939
投稿日: 2009/05/13(Wed) 17:34
投稿者にっく
ダンボさんご回答有がとうございます!!


Array.Copyのところは数値を変えると、ソース配列やターゲット配列の長さが足りない
などエラーが出ましたが、ENDを削除して無事、自分の思っていたところで改行でき、
テキスト表示、保存までできました!

Array.CopyやJoinなどのメソッドをうまく使いこなせるようもっと勉強します。

本当に有難うございました。

[ツリー表示へ]
タイトルRe^3: テキストファイルの分割
記事No8979
投稿日: 2009/05/18(Mon) 16:32
投稿者マルポリンカ
マルチポスト?リンク
http://bbs.wankuma.com/index.cgi?mode=al2&namber=36014

[ツリー表示へ]