文本文件中的内容删减,插入字符和排版的问题。

long12 2004-12-24 01:31:59
在一文本文件txt中有如下内容:

1 cnxzq1 112 好:05 06 08 14 18 20 21 31 54
坏:03 13 1 112.000 100% 成功
2 547888 14 好:03 08 09 19 24 29 31 46
坏:09 1 14.000 100% 成功
3 gqy 112 好:06 12 14 15 22 23 24 33 76
坏:09 10 15 40 20 5.600 65% 未成功

要处理成:

cnxzq1|05 06 08 14 18 20 21 31 54 + 03 13|4-8|0-9|同时|
547888|03 08 09 19 24 29 31 46 + 09|4-8|0-9|同时|
gqy|06 12 14 15 22 23 24 33 76 + 09 10 15 40|4-8|0-9|同时|

请问如何写代码? 谢谢帮忙!!
...全文
223 点赞 收藏 24
写回复
24 条回复
cindytsai 2004年12月27日
学习
回复 点赞
maskdata 2004年12月27日
可能还有更好的办法,不过我资质比较低还没想到,等我想到更好的再贴上来
回复 点赞
maskdata 2004年12月27日
Dim strRes As String
Dim strArr2() As String
Dim strArr3() As String
Dim strTemp, strfile, strArr() As String
Dim xkey As Boolean

Private Sub Command1_Click()
Open "C:/test.txt" For Input As #1
Do Until EOF(1)
Line Input #1, strTemp
If xkey = False Then
strfile = strfile & strTemp & " "
xkey = True
Else
strfile = strfile & strTemp
xkey = False
End If
Loop
Close #1
strArr = Split(strfile, "%")
For i = 0 To UBound(strArr) - 1 Step 1
If i = 0 Then
strArr(i) = strArr(i) & ":"
Else
strArr(i) = Mid(strArr(i), 2) & ":"
End If
strArr2 = Split(strArr(i), ":")
For n = 0 To UBound(strArr2) - 1 Step 1
strArr2(n) = strArr2(n) & " "
strArr3 = Split(strArr2(n), " ")

If n = 0 Then
If i = 0 Then
strRes = strRes + strArr3(1)
Else
strRes = strRes + strArr3(2)
End If
strRes = strRes + "|"
ElseIf n = 1 Then
For m = 0 To UBound(strArr3) - 2 Step 1
strRes = strRes + strArr3(m) + " "
Next m
strRes = strRes & "+ "
ElseIf n = 2 Then
For m = 0 To UBound(strArr3) - 4 Step 1
If m = UBound(strArr3) - 4 Then
strRes = strRes + strArr3(m)
Else
strRes = strRes + strArr3(m) + " "
End If
Next m

strRes = strRes & "|4-8|0-9|同时|"
If i <> UBound(strArr) - 1 Then
strRes = strRes _
& vbCrLf
End If
End If
Next n
Next i
rtbox.Text = strRes
End Sub

调试过没问题了,你拿去试试,应该可以看的懂我的代码吧(....本人编码够规范了吧....-_-!)
strRes是你要的最好结果,我把他显示在RichTextBox里了(rtbox)
回复 点赞
long12 2004年12月27日
再次试了一下,又没有问题了。谢谢各位!
回复 点赞
long12 2004年12月27日
我的vb是vb6sp6中文迷你版,大小只有6MB多,不知是否有问题?
回复 点赞
Keepmyself 2004年12月27日
可能是字体问题吧
回复 点赞
maskdata 2004年12月27日
那一定不是我代码的问题了,我这里试过了很正常的,我还把你的复制进去了对比一下,一点区别都没有的,你看看是不是你那里VB出问题了,或是系统字体有问题
回复 点赞
long12 2004年12月27日
谢谢maskdata!其他都很好,就是“同时”显示为2个黑方块,不知为什么?
回复 点赞
long12 2004年12月25日
to tztz520

你的代码只能对前两组数据进行处理,另外“同时”显示不出,“+”与前后数字之间都没有空格。
回复 点赞
long12 2004年12月24日
to maskdata

"还有从第2个开始要把第一个空格截取掉不要"

不是很明白,但要注意最后处理好的结果中的“+”与前后数字之间都有空格。
回复 点赞
long12 2004年12月24日
谢谢maskdata!让我慢慢琢磨一下,希望看到你的详细代码。
回复 点赞
maskdata 2004年12月24日
还有从第2个开始要把第一个空格截取掉不要
回复 点赞
maskdata 2004年12月24日
1 cnxzq1 112 好:05 06 08 14 18 20 21 31 54
坏:03 13 1 112.000 100% 成功
2 547888 14 好:03 08 09 19 24 29 31 46
坏:09 1 14.000 100% 成功
3 gqy 112 好:06 12 14 15 22 23 24 33 76
坏:09 10 15 40 20 5.600 65% 未成功

转成:

"1 cnxzq1 112 好:05 06 08 14 18 20 21 31 54 坏:03 13 1 112.000 100" + ":"
" 成功 2 547888 14 好:03 08 09 19 24 29 31 46 坏:09 1 14.000 100" + ":"
" 成功 3 gqy 112 好:06 12 14 15 22 23 24 33 76 坏:09 10 15 40 20 5.600 65" + ":"

转成:

"1 cnxzq1 112 好"+" " "05 06 08 14 18 20 21 31 54 坏"+" " "03 13 1 112.000 100"+" "
" 成功 2 547888 14 好"+" " "03 08 09 19 24 29 31 46 坏"+" " "09 1 14.000 100"+" "
" 成功 3 gqy 112 好"+" " "06 12 14 15 22 23 24 33 76 坏"+" " "09 10 15 40 20 5.600 65"+" "

然后:

1和别的分开算,1的话取第1组取第2位,不是1的话第1组取第3位,然后加"|"
然后全部是第2组取第1到倒数第2位,然后加"+",第3组取第1到倒数第4位然后加"|0-9|同时|"
回复 点赞
maskdata 2004年12月24日
我觉得和我写的一个程序差不多,不过现在快下班了,周一来帮你做好吗?
先说一下方法,先读到文本有多少行,然后/2得到数目
以%把文本转成数组
然后把每个数组元素加一个":"
再把这个元素以:转成3个数组
第1个取数组加" "转成另一个数组取第二位,第2个从第一位取到倒数第三位,第3个从第一位取到倒数第三位,然后加上"|4-8|0-9|同时|"
回复 点赞
aohan 2004年12月24日
不在明了
回复 点赞
long12 2004年12月24日
本身有编号,而且是按从小到大的顺序。
回复 点赞
maskdata 2004年12月24日
问一下楼主,每一组前边的编号有吗?还是为了大家看清楚问这个问题的时候加上去的?
回复 点赞
long12 2004年12月24日
tztz520的代码实现起来似乎有点接近要求,但好象还不能完全达到目的,其实我上面列出的文本内容只有3组,而实际上有数百组类似的数据要处理。不知哪位还有更好的方法,请不吝赐教,谢谢!
回复 点赞
long12 2004年12月24日
其实还是有规律的,就是保留“好:”后面所有的数字,“坏:”后面的至倒数第5个字串的所有数也保留,“好:”所在行的第2个字串也保留,其它剩余所有的均删除,然后再插入需要的字符并排版。
回复 点赞
tztz520 2004年12月24日
'我只看到这个规律,不知道对不对
回复 点赞
发动态
发帖子
VB基础类
创建于2007-09-28

2751

社区成员

19.7w+

社区内容

VB 基础类
社区公告
暂无公告