标题:如何同时读入一个文件夹中的所有TXT文本,并把结果写入同一个文本 请教我是 ...
只看楼主
jack_xu2046
Rank: 2
等 级:论坛游民
帖 子:72
专家分:11
注 册:2008-10-1
得分:0 
回复 1# 菜鸟新上路 的帖子
这两天我也刚做了一个像你这样的程序,我做的内容是将一个文件夹中的所有*csv文件中的某些数据提取出来,然后放到一个EXCEL文件中,,CSV文件跟txt差不多..


下面是代码,我是刚学的,代码写的乱七八糟,可是功能实现了,在窗体中需建文件列表框,驱动器列表框,dir列表框,两个文本框,一个命令按钮.
Option Base 1
Private Sub Cmd1_Click()
Dim data(51) As Variant, s As String, i As Integer, k As Long, bb As Integer
Dim x() As String, y As Integer, hh(51) As String, t() As String
bb = 2
h = FreeFile()

Dim j As Integer
j = 0

'Print "C:\Documents and Settings\xuyadong\桌面\CSV" & "\" & File1.FileName
Do While File1.FileName <> "file1"

File1.ListIndex = File1.ListIndex + 1
'Print File1.FileName
Open Dir1.Path & "\" & File1.FileName For Input As h
i = 1
Do While Not EOF(h)      '把每一行放到数组data中
Line Input #h, s
data(i) = Trim(Trim(data(i)) & Trim(s) & ",")
i = i + 1
Loop    '取值循环结束
Close h

If File1.ListIndex = File1.ListCount - 1 Then
Exit Do
End If
Loop     '读文件循环结束

'Print data(1)

   '生成EXCEL
Dim XlApp     As New Excel.Application
Dim outpath As String
Dim XlWb     As New Excel.Workbook
Dim XlSt     As New Excel.Worksheet

Set XlApp = CreateObject("Excel.Application")
XlApp.Visible = False
outpath = "C:\Documents and Settings\debug\Desktop\jack.xls"
   
Set XlWb = XlApp.Workbooks.Open(outpath)
Set XlSt = XlWb.Worksheets("sheet1")


'以下不需处理
For k = 1 To 51
Text1.Text = ""
Text2.Text = ""
Print



For m = 1 To Val(Len(data(k)))


Text1.Text = Trim(Text1.Text) & Mid(Trim(data(k)), m, 1)
If Mid(Trim(data(k)), m, 1) = "," Then
hh(k) = Trim(Text1.Text)     '取CSV数据中每个测试项
'Print hh(k)
Exit For
End If


Next m

x() = Split(Trim(data(k)), Trim(Text1.Text))   'data数组中的一行数据分割完成,形成一个数组
For y = LBound(x) To UBound(x)     '将一行数组从第一个元素循环到最后一个
            
Text2.Text = Trim(Text2.Text) & Trim(x(y))   '按循环将X数组中的每一项放进文本框2中直到放全为止
              
'Print Trim(x(y));
Next y   '此时TEXT2中字符串等于X数组所有

t() = Split(Trim(Text2.Text), ",")

                         'For i = LBound(t) To UBound(t)
   ' Print t(i);
   
         


Dim mm As Integer
mm = mm + 1                                    'mm代表行,i代表列
 For i = LBound(t) To UBound(t)
  ' XlSt.Cells(mm, i + 2) = t(i)                '一行一行的往EXCEL中放数据
    XlSt.Cells(i + 2, mm) = t(i)              '一列一列的往EXCEL中放数据
   
   Next i
ProgressBar1.Value = k

Next k

   
For bb = 5 To UBound(hh)
 ' XlSt.Cells(bb, 1) = hh(bb)                   '当前面是行取
        
    XlSt.Cells(1, bb) = hh(bb)                  '当前面是列取
        Next bb
    XlWb.Save
   XlWb.Close
   XlApp.Quit


 huihui = MsgBox("it's down in jack.xls")

End Sub


Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub

Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive
End Sub
2008-10-01 05:08
lyk997
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2008-9-29
得分:0 
如果一个文件夹有200个txt,但我只要选择部分的*.TXT合并呢,该怎么样去设置???
  请我是菜鸟版主帮个忙,谢谢了
2008-10-02 11:02
我是菜鸟哦
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:921
专家分:209
注 册:2007-5-4
得分:0 
那些特定的TXT的名称是否有规律?

偶是菜鸟鸟偶惧WHO?!!!!
2008-10-02 11:12
lyk997
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2008-9-29
得分:0 
名称有没有规律这个问题大吗??我想要的是用鼠标框选的哪几个TXT合并就好...
2008-10-02 11:18
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
得分:0 
[bo][un]lyk997[/un] 在 2008-10-2 11:18 的发言:[/bo]

名称有没有规律这个问题大吗??我想要的是用鼠标框选的哪几个TXT合并就好...

那就用类似CommonDialog的来选取文件,然后对每个文件进行提取数据的操作。
2008-10-02 11:21
lyk997
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2008-9-29
得分:0 
我刚试了下,用Commondialog只能选其中的一个TXT,请问下要怎么设置才能多选呢!
2008-10-02 11:39
我是菜鸟哦
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:921
专家分:209
注 册:2007-5-4
得分:0 
给你个方法提示(再用个LIST,双击FILE的文件,然后读到LIST中,然后。。。。和以前那个代码差不多)
Private Sub File1_DblClick()
Static a As Integer
List1.List(a) = File1.FileName
a = a + 1
End Sub

[[it] 本帖最后由 我是菜鸟哦 于 2008-10-2 11:48 编辑 [/it]]

未命名.gif (11.13 KB)

偶是菜鸟鸟偶惧WHO?!!!!
2008-10-02 11:42
lyk997
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2008-9-29
得分:0 
虽然是可以实现,但这样就没有鼠标框选那样方便用了...
2008-10-02 11:53
我是菜鸟哦
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:921
专家分:209
注 册:2007-5-4
得分:0 
既然用鼠标框选的话,为何不CTRL+C,CTRL+V到另一个文件夹呢?何必再多此一举?

偶是菜鸟鸟偶惧WHO?!!!!
2008-10-02 12:02
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
得分:0 
[bo][un]lyk997[/un] 在 2008-10-2 11:39 的发言:[/bo]

我刚试了下,用Commondialog只能选其中的一个TXT,请问下要怎么设置才能多选呢!

Const cdlOFNAllowMultiselect = 512 (&H200)
    Member of MSComDlg.FileOpenConstants
    Allows the File Name list box to have multiple selections.

放在CommonDialog的Flag属性里
2008-10-02 13:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-235214-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.435037 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved