Excel精英培训网

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

[已解决]求助:关于 间隔提取文本。

[复制链接]
发表于 2011-10-1 10:29 | 显示全部楼层 |阅读模式

附件: help_1001.rar (2.27 KB, 下载次数: 27)
发表于 2011-10-1 11:18 | 显示全部楼层
对于txt文件,不晓得readline可不可以从后往前读、或者指定读取第几行。
如果不行,对于较小的txt文件可用readall一次性读出来再取需要的。
不过还是建议使用其它来读取,如使用word、excel等来打开txt文件后,再控制读取所需要的
回复

使用道具 举报

发表于 2011-10-1 11:39 | 显示全部楼层

  1. Sub tiqu()
  2.     Dim p As String, arr() As String, arr2() As String
  3.     Dim i As Long, s As Integer, jg As Integer, cs As Integer

  4.     jg = Range("a1")    '间隔
  5.     cs = Range("b1")    '次数
  6.     p = ThisWorkbook.Path
  7.     Open p & "\test.txt" For Input As #1
  8.     arr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)
  9.     Close #1
  10.     ReDim arr2(1 To UBound(arr))
  11.     i = UBound(arr)

  12.     Do While s < cs
  13.         If i > jg - 1 Then
  14.             s = s + 1
  15.             If jg = 1 Then
  16.                 i = i - 1    '移动方法1
  17.             Else
  18.                 i = i - jg + 1    '移动方法2
  19.             End If
  20.             arr2(s) = arr(i)
  21.             i = i - 1
  22.         End If
  23.     Loop

  24.     Open p & "\result.txt" For Output As #1
  25.     For i = 1 To s
  26.         Print #1, arr2(i)
  27.     Next i
  28.     Close #1
  29. End Sub
复制代码

不知可以不{:041:}
回复

使用道具 举报

发表于 2011-10-1 17:17 | 显示全部楼层
学习文本文件的提取方法
回复

使用道具 举报

 楼主| 发表于 2011-10-1 19:32 | 显示全部楼层
爱疯 发表于 2011-10-1 11:39
不知可以不

测试 A1=3 B1=3时。

表格卡死。。。

不知道哪里的原因。。

请 版主 老师 再看看。谢谢
回复

使用道具 举报

 楼主| 发表于 2011-10-1 19:34 | 显示全部楼层
发现。。。若是 test.txt 的 内容  不能满足 提取 参数的 话 表格会卡死。。

回复

使用道具 举报

发表于 2011-10-1 20:47 | 显示全部楼层
studystudy 发表于 2011-10-1 19:34
发现。。。若是 test.txt 的 内容  不能满足 提取 参数的 话 表格会卡死。。

  1. Sub tiqu()
  2.     Dim p As String, arr() As String, arr2() As String
  3.     Dim i As Long, s As Integer, jg As Integer, cs As Integer

  4.     jg = Range("a1")    '间隔
  5.     cs = Range("b1")    '次数
  6.     p = ThisWorkbook.Path
  7.     Open p & "\test.txt" For Input As #1
  8.     arr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)
  9.     Close #1
  10.     ReDim arr2(1 To UBound(arr))
  11.     i = UBound(arr)

  12.     Do Until s = cs
  13.         If i > jg - 1 Then
  14.             s = s + 1
  15.             If jg = 1 Then
  16.                 i = i - 1    '移动方法1
  17.             Else
  18.                 i = i - jg + 1    '移动方法2
  19.             End If
  20.             arr2(s) = arr(i)
  21.             i = i - 1
  22.         Else
  23.             Exit Do
  24.         End If
  25.     Loop

  26.     Open p & "\result.txt" For Output As #1
  27.     For i = 1 To s
  28.         Print #1, arr2(i)
  29.     Next i
  30.     Close #1
  31. End Sub
复制代码
是我没想好,改了,再呢{:011:}
回复

使用道具 举报

 楼主| 发表于 2011-10-1 23:50 | 显示全部楼层
老师好。

代码好像还有点BUG,,,


A1=1,B1=5.

可以得到正确结果。

0200
77001
8009
6302


当我改成

A1=2,B1=5时。。

得到结果

0200
77001
8009
6302

明显错误了。

正确的应该是:


493
8009
351

回复

使用道具 举报

 楼主| 发表于 2011-10-1 23:50 | 显示全部楼层
请版主 老师 再检查一下。

谢谢
回复

使用道具 举报

发表于 2011-10-2 00:44 | 显示全部楼层    本楼为最佳答案   


按第10行的规则,有填充色的单元格是结果。

按I10的规则,结果应是77001,6302。而1楼要求的结果是错的(493,809,这是2,2规则才的结果)

同时我也改了下,觉得这次应该好了吧
{:301:}



  1. Sub tiqu()
  2.     Dim p As String, arr() As String, arr2() As String
  3.     Dim i As Long, s As Integer, jg As Integer, cs As Integer
  4.     jg = Range("a1")    '间隔
  5.     cs = Range("b1")    '次数
  6.     p = ThisWorkbook.Path
  7.     Open p & "\test.txt" For Input As #1
  8.     arr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)
  9.     Close #1
  10.     ReDim arr2(1 To UBound(arr))
  11.     i = UBound(arr)

  12.     Do Until s = cs
  13.         If i > jg Then
  14.             s = s + 1
  15.             If s = 1 Then
  16.                 i = i - jg    '第1次移动
  17.             Else
  18.                 i = i - jg - 1    '不是第1次移动
  19.             End If
  20.             arr2(s) = arr(i)
  21.         Else
  22.             Exit Do
  23.         End If
  24.     Loop

  25.     Open p & "\result.txt" For Output As #1
  26.     For i = 1 To s
  27.         Print #1, arr2(i)
  28.     Next i
  29.     Close #1
  30. End Sub
复制代码
help_1001(1).rar (19.01 KB, 下载次数: 26)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-17 00:54 , Processed in 0.159426 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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