Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5826|回复: 17

【求问】txt提取的问题?

[复制链接]
发表于 2014-3-23 23:26 | 显示全部楼层 |阅读模式
50学分
捕获.JPG
这个是我vba代码写入达到的txt文本,语句为:Print #1, ar1(i, 1), ar1(i, 2)
2个字符串中间多了很多的空格(实际不是空格)

现在,我想把这个txt的内容赋值到数组中,求教大侠应该怎么写代码
想要达到的答案是
arjg(2,1)=“17”,arjg(2,2) ="1LZZSN"
arjg(3,1)=“21”,arjg(3,2) ="LZNZNN"

请不要用right和left来取字符,因为前面的字符个数和后面的字符个数不一样

试验.rar (621 Bytes, 下载次数: 8)

最佳答案

查看完整内容

有的有一位空格前缀,替换了。
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-3-23 23:26 | 显示全部楼层
  1. Sub test1()
  2.     Dim strFileName$
  3.     Dim fn, a$, b
  4.     Dim arr()
  5.     Dim i As Long
  6.     fn = FreeFile
  7.     ReDim arr(1 To 2, 1 To 1)
  8.     strFileName = ThisWorkbook.Path & "\试验.txt"
  9.     Open strFileName For Input As #fn
  10.     Do While Not EOF(1)
  11.         i = i + 1
  12.         ReDim Preserve arr(1 To 2, 1 To i)
  13.         Line Input #1, a
  14.         b = Split(a, Space(12))
  15.         arr(1, i) = Trim(b(0))
  16.         arr(2, i) = Trim(b(1))
  17.     Loop
  18.     Close #fn
  19.     If i Then
  20.         b = WorksheetFunction.Transpose(arr)
  21.      End If
  22. End Sub
复制代码
有的有一位空格前缀,替换了。

回复

使用道具 举报

发表于 2014-3-23 23:42 | 显示全部楼层
通常用 Line Input # 或 Input 读出 Print # 在文件中写入的数据。

注意 如果今后想用 Input # 语句读出文件的数据,就要用 Write # 语句而不用 Print # 语句将数据写入文件。因为在使用 Write # 时,将数据域分界就可确保每个数据域的完整性,因此可用 Input # 再将数据读出来。使用 Write # 还能确保任何地区的数据都被正确读出。

回复

使用道具 举报

 楼主| 发表于 2014-3-23 23:53 | 显示全部楼层
hwc2ycy 发表于 2014-3-23 23:42
通常用 Line Input # 或 Input 读出 Print # 在文件中写入的数据。

注意 如果今后想用 Input # 语句读出 ...

求教下代码,不太明白,是不是我不应该用input写入数据到txt呀???
回复

使用道具 举报

发表于 2014-3-23 23:55 | 显示全部楼层
  1. Sub test()
  2.     Dim strFilename$
  3.     Dim str$, arr
  4.     strFilename = ThisWorkbook.Path & "\试验.txt"
  5.     Open strFilename For Input As #1
  6.     str = StrConv(InputB(LOF(1), #1), vbUnicode)
  7.     Close #1
  8.     arr = Split(str, vbCrLf)
  9.     MsgBox UBound(arr) + 1
  10. End Sub
复制代码
Msgbox显示的是行数
回复

使用道具 举报

 楼主| 发表于 2014-3-24 00:04 | 显示全部楼层
hwc2ycy 发表于 2014-3-23 23:55
Msgbox显示的是行数

谢谢解答,不想求问的结果
捕获.JPG
代码是把1行的数据读入到1个变量里面
我希望做到的是:因为1行的字符串是2个,所以写入2个变量里面,ar(i,1),ar(i,2)
这样就可以用cells(1,1).resize(ubound(ar),ubound(ar,2)) = ar

请求烟花帮忙解决,谢谢烟花
回复

使用道具 举报

 楼主| 发表于 2014-3-24 00:06 | 显示全部楼层
hwc2ycy 发表于 2014-3-23 23:55
Msgbox显示的是行数

因为一行有2个字符,所以希望结果也是1行2个字符
如:
ar(2,1)=“17”,ar(2,2) ="1LZZSN"
ar(3,1)=“21”,ar(3,2) ="LZNZNN"

求教烟花帮忙
回复

使用道具 举报

发表于 2014-3-24 00:12 | 显示全部楼层
  1. Sub test()
  2.     Dim strFilename$
  3.     Dim obj As Scripting.FileSystemObject
  4.     Dim txtStream As Scripting.TextStream
  5.     strFilename = ThisWorkbook.Path & "\试验.txt"
  6.     Set obj = New Scripting.FileSystemObject
  7.     Set txtStream = obj.OpenTextFile(strFilename, ForReading, False, TristateFalse)
  8.     Do While Not txtStream.AtEndOfLine
  9.         txtStream.ReadLine
  10.     Loop
  11.     MsgBox txtStream.Line
  12.     txtStream.Close
  13.     Set txtStream = Nothing
  14. End Sub
复制代码
用FSO对象获取长度
回复

使用道具 举报

发表于 2014-3-24 00:17 | 显示全部楼层
TXT文件是怎么来的?
可以把空格替换下,只保留一个空格,然后再用split分离。
回复

使用道具 举报

发表于 2014-3-24 00:18 | 显示全部楼层
明天再看。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-6-8 11:19 , Processed in 0.392797 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表