| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1773 人关注过本帖
标题:提取数据, 会的朋友给个思路, 并告知所用函数
只看楼主 加入收藏
菜鸟新上路
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2008-9-15
结帖率:60%
收藏
 问题点数:0 回复次数:10 
提取数据, 会的朋友给个思路, 并告知所用函数
二维数组A(),如下:

10 1  k1
20 2  k2
30 3  k3
40 4  k4
40 5  k5
.  .  .
.  .  .
.  .  .
.  .  .

我有一个文件夹,文件夹里面有多个子文件夹,子文件夹里面有多个TXT文本,每个文本的类型如下:


× × × ×  x  y

× × × × × ×

× × × × × ×

× × × × × ×

#

× × × × × ×

× × × × × ×

× × × × × ×

× × × × × ×

× × × × × *

其中 x y # * 都为不同的数字,(x y # 有许多重复,所以有多个子文件夹)

要求是,如果 TXT 文本中第一行的最后两个数分别对应数组 A() 中某行的前两个数分别对应,则打开该文本,
读取#后的第 k  行数据,


我的思路是,

1

把数组A()中的三列分别读取的三个数组arr1,arr2, arr3, 作为共用,
然后引用arr1(i),arr2(i),arr3(i),

2

打开文件夹中的TXT文本,

line input#1, s
 for i = 1 to n
 k = arr3(i)

if arr1(i) = x and arr2(i) = y then

继续读入,直到读到 # 所在的行,打印改行以后的第arr3(i) 行的最后一个字符 #


我的问题是:

1  如何引用arr1(i),arr2(i),arr3(i)

2  整个代码 是否需要四重嵌套,分别判断 arr1(i),arr2(i), #, arr3(i)

[[it] 本帖最后由 菜鸟新上路 于 2008-11-7 10:14 编辑 [/it]]
搜索更多相关主题的帖子: 函数 思路 数据 朋友 
2008-11-07 10:10
菜鸟新上路
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2008-9-15
收藏
得分:0 
我觉得这个帖子充分考察了VB中的数组的相关知识, 放在这里一是请教大家,而是让大家检验一下自己对数组部分知识的掌握情况,特别是给我这样的初学者一个学习思考的机会
2008-11-07 10:21
我是菜鸟哦
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:921
专家分:209
注 册:2007-5-4
收藏
得分:0 
读取第一行的末尾不是字符串的处理吗?
用MID(s,len(s)-2,1)读取S的倒数第二位,MID(s,len(s)-1)读取最后一位

所以读取文件夹一层循环
读取文件次循环
查字符串(包括判断成功继续读取)再次循环

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

偶是菜鸟鸟偶惧WHO?!!!!
2008-11-07 11:42
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
1.二维数组就可以了,没必要分成3个一维数组
2.如果A()的第二列是递增的,那可以用二分法,查找起来很快,如果不是递增,那就要全部找一遍(当然最好是先排序一下)
3.大概3层循环就可以了,因为每次比较的是二维数组的一行

从BFS(Breadth First Study)到DFS(Depth First Study)
2008-11-07 11:49
菜鸟新上路
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2008-9-15
收藏
得分:0 
谢谢 两位版主的回复,我可能没有表达清楚,我的问题主要是二维数组如何引用那个二维数据,Arr()共有300行,而且各个数据是杂乱无章的,
2008-11-07 15:04
我是菜鸟哦
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:921
专家分:209
注 册:2007-5-4
收藏
得分:0 
[bo][un]菜鸟新上路[/un] 在 2008-11-7 15:04 的发言:[/bo]

谢谢 两位版主的回复,我可能没有表达清楚,我的问题主要是二维数组如何引用那个二维数据,Arr()共有300行,而且各个数据是杂乱无章的,


如何引用那个二维数据 这里的二维数据指的是什么

偶是菜鸟鸟偶惧WHO?!!!!
2008-11-07 17:43
我是菜鸟哦
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:921
专家分:209
注 册:2007-5-4
收藏
得分:0 
实在不行的话,你把你要求的效果说明白,我写一个

偶是菜鸟鸟偶惧WHO?!!!!
2008-11-08 08:46
菜鸟新上路
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2008-9-15
收藏
得分:0 
请用 WORD 文档打开
请用 WORD 文档打开, 我重新编辑了一下 ,放在压缩文件里  请版主看看  谢谢


我的QQ  35140132

[[it] 本帖最后由 菜鸟新上路 于 2008-11-8 13:36 编辑 [/it]]

新建 Microsoft Word 文档.rar (33.6 KB)
2008-11-08 13:29
我是菜鸟哦
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:921
专家分:209
注 册:2007-5-4
收藏
得分:0 
Private Sub Command1_Click()
Dim d(1 To 300, 1 To 3) As String
Dim s
Dim l() As String
Dim checkp, checkp2

d(1, 1) = "OK"   '假定第一个数组里的 m=ok n=ko k=1
d(1, 2) = "KO"
d(1, 3) = "1"

'初始化检查点
checkp = 0
checkp2 = 0

'这里只给出读取一个文本
Open "D:\123.txt" For Input As #1
Line Input #1, s '先读一次
l = Split(s)   '拆分内容

If l(UBound(l) - 1) = d(1, 1) And l(UBound(l)) = d(1, 2) Then

MsgBox "进入"   '如果满足第一行的最后一个=KO,倒数第二个=OK 则提示进入

Do While Not EOF(1)  '然后继续读取

Line Input #1, s


If checkp = 1 Then  '当检查点被置为1的时候,说明已经找到P,并且这时已经读到P的下一行,这个见底下给CHECKP赋值的IF
checkp2 = checkp2 + 1 '判断将要读取P后的行数

If checkp2 <= CInt(d(1, 3)) Then '当CHECKP2小于K值,即要求读取的P后的行数(数组d(1,3))
l = Split(s) '然后读取到拆分内容
MsgBox l(UBound(l)) '显示读取到的行数的最后的内容
End If

End If


If s = "P" Then checkp = 1 '如果读到P,则下次读行将进行对P后的K行处理
Loop

End If

Close #1
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
'我用的文本的内容
'00 13 A9 45 OK KO
'P
'12 12 334 345 90
'123 12 4 66
'23 34 45 667



'显示结果为:进入  90

偶是菜鸟鸟偶惧WHO?!!!!
2008-11-08 15:54
我是菜鸟哦
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:921
专家分:209
注 册:2007-5-4
收藏
得分:0 
至于如何经遍文件夹和文本,以前好像给你说过了,也就是个简单的二层循环用个DIRLIST和FILELIST就实现了
记得每次进入文本的时候,CHECK要记得复位

偶是菜鸟鸟偶惧WHO?!!!!
2008-11-08 16:07
快速回复:提取数据, 会的朋友给个思路, 并告知所用函数
数据加载中...
 
   



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

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