关于txt文本数据排序的问题

xiaoshi2021 2010-10-10 01:16:40
大家好,我请教您们一个关于txt排列的问题,源文本是这样的:
XXXXXX布置;XXXXXXX-0-0
;1;按本图;;本体%%C1800/%%c1600 L=10000;1;19Mn6;;41925;;1;0
;8;XXXXXXX-1-8;;管套;13;20(锻);5.46;71.0;放泵水余量;8;0
;7;XXXXXXX-1-7-0;;管子 ;12;;4.73;56.8;;7;0
;3;XXXXXXX-1-3-0;;人孔盖装置 ;2;;162;324;;3;0
;2;XXXXXXX-1-2;;球形封头 %%C1600×100  ;2;19Mn6;3568;7136;;2;0
;25;QG5012-2003;;管接头 %%C16x3加强;4;20G;0.2;0.80;放泵水余量;25;0
;12;QG5016-77;;套管接头 D=109;2;20;3.09;6.18;放泵水余量;12;0
;16;XXXXXXX-1-16;;管接头 %%C60x6;1;20G;;0.66;;16;0
;17;按本图;;管接头 %%C28x4 L=245;1;20G;;0.59;两端外倒角1x37.5%%d;17;0
;4;XXXXXXX-1-4;;管接头;2;16Mn;514;1028;;4;0
;6;XXXXXXX-1-6;;管接头 %%C133×12;8;20G;5.13;41.0;放泵水余量;6;0
;26;LR11.463;;测温座 M33x2;6;20;0.7;4.20;;26;0
;9;QG5012-2003;;管接头 %%C28×4加强;4;20G;0.31;1.24;放泵水余量;9;0
;10;LR11.425;;管接头 %%C28×4 ;2;20;0.24;0.48;放泵水余量;10;0
;11;LR11.426;;管接头 %%C76x8;2;20G;1.34;2.68;放泵水余量;11;0
;13;LR11.427;;管接头 %%C133x12;2;20G;5.38;10.8;;13;0
;14;按本图;;管接头 %%C76x8 L=335;2;20G;4.12;8.24;两端外倒角1x37.5%%d;14;0
;15;QG5016-77;;套管接头 D=48;1;20;;0.27;放泵水余量;15;0
;18;XXXXXXX-1-18;;管接头;2;20(锻);7.0;14.0;;18;0
;19;QG5046-2007;;管接头 %%C108×10;1;20G;;2.9;放泵水余量;19;0
;20;XXXXXXX-1-20-0;;管子 ;1;;;4.41;;20;0
;23;XXXXXXX-1-23;;管接头 %%C28x4加强;3;20G;0.36;1.08;放泵水余量;23;0
;24;XXXXXXX-1-24;;管接头 %%C28x4加强;3;20G;0.88;2.64;放泵水余量;24;0
;22;XXXXXXX-1-22;;管接头 %%C219x16;4;SA106-B;32;128;放泵水余量;22;0
;5;XXXXXXX-1-5;;管接头 %%C159×10;32;20G;6.36;204;放泵水余量;5;0
;27;XXXXXXX-1-27;;热电偶插座;6;20;1.3;7.80;;27;0
;28;XXXXXXX-1-28;;螺塞;6;Q235-A;0.1;0.60;;28;0
;30;XXXXXXX-1-30;;管接头 %%C108×10 ;1;20G;;2.97;放泵水余量;30;0
;21;XXXXXXX-1-21;A;端盖;1;20g;;1.06;;21;0
;29;XXXXXXX-1-29;;保温档圈;2;Q235-A;5.00;10.00;;29;0


想要的结果是这样的:
XXXXXX布置;XXXXXXX-0-0
;1;按本图;;本体%%C1800/%%c1600 L=10000;1;19Mn6;;41925;;1;0
;2;XXXXXXX-1-2;;球形封头 %%C1600×100  ;2;19Mn6;3568;7136;;2;0
;3;XXXXXXX-1-3-0;;人孔盖装置 ;2;;162;324;;3;0
;4;XXXXXXX-1-4;;管接头;2;16Mn;514;1028;;4;0
;5;XXXXXXX-1-5;;管接头 %%C159×10;32;20G;6.36;204;放泵水余量;5;0
.......
就是根据;号后的数字进行排列操作,我用的是VB,请大家帮帮我。。。谢了
...全文
657 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jhone99 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 vbman2003 的回复:]
要下班了,放下事情给你一个思路,本示例假设序号无重复(如果有重复,稍作修改同元素串接一下就行了),序号从1开始:

VB code

Private Sub Command1_Click()
Dim fileName As String
Dim lngFile As Long
Dim strFile As String
Dim arr() As St……
[/Quote]

不错,挺巧的
of123 2010-10-11
  • 打赏
  • 举报
回复
'对提取出来的数据进行排序操作
Sub TEST()
Dim a As String, b() As String
Dim filename As String
Dim tmp As String '其实用 a 就可以,加一个变量仅仅为了提高易读性
Dim i As Integer, j As Integer, n As Integer

filename = ThisDrawing.Path + "\" + Split(ThisDrawing.Name, ".")(0) + ".txt"
Open filename For Binary As #1
'打开txt文件,文件名自己改
a = Input(LOF(1), #1)
'把整个txt文件的内容读入字符串变量a中
b = Split(a, vbCrLf)
'这时候b()数组中即包含了txt文件中的每行数据
'这样就可以对b()数组进行各种排序操作了
'具体如何排序就不知道了
'......
For i = 0 To Ubound(b) - 1
If Val(Mid(b(i), 2) > i + 1 Then
tmp = b(i)
For j = i + 1 To Ubound(b)
If Val(Mid(b(j), 2) = i + 1 Then
b(i) = b(j)
b(j) = tmp
Exit For
End If
Next j
End If
Next i
a = Join(b, vbCrLf)
'b()数组排序后重新组合为一个字符串a
Put #1, 1, a
'把处理后的数据重新写入文件
Close #1
End Sub
K-dash 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 vbman2003 的回复:]
写到recordset中,用其sort方法排序,效率很不错的...
[/Quote]


顶~~呵呵
superNANA_MUMU 2010-10-11
  • 打赏
  • 举报
回复
上面那个 M应该定义是 intenger,错了 不好意思啊
superNANA_MUMU 2010-10-11
  • 打赏
  • 举报
回复

下面是我自己写的代码,可能有点笨,运行应该没有问题,希望大家多指证一起学习啊

Dim Strline As String
Dim i As Integer
Dim n As Integer
Dim m As String
Dim j As Integer
Dim a() As String
Dim b() As String
FileName = ThisDrawing.Path + "\" + Split(ThisDrawing.Name, ".")(0) + ".txt"
'*****读取数据文件********************************
Open FileName For Input As #1
Do '开始读行循环
Line Input #intFilenum, Strline '读行
a = Split(Strline, ";") '将行数据分割到数组中
n = UBound(a) '获得数据的最后一个的下标
m = a(n - 1) '获得你要排号的数字
b(m) = Strline '将数据读入到数组中
i = i + 1
Loop While Not EOF(1) '读文件循环到文件尾
Close #1
'*****输出数据文件********************************
Open FileName & "2.txt" For Output As #2
For j = 1 To i
Print #2, b(j) '按排号输出
Next j
Close #2
vbman2003 2010-10-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xiaoshi2021 的回复:]
谢谢各位,把它读到数据库内或是EXCEL内,我都是可以操作。我的意图就是,直接能否在vb中直接写一段关于排序的代码,就是直接操作了,不需要再读入其它的地方去。若直接操作我就是中间排序的代码不知该如何去写。现在可以:
'对提取出来的数据进行排序操作
Sub TEST()
Dim a As String, b() As String
Dim filename As String
filena……
[/Quote]
7楼示例没看?
xiaoshi2021 2010-10-10
  • 打赏
  • 举报
回复
谢谢各位,把它读到数据库内或是EXCEL内,我都是可以操作。我的意图就是,直接能否在vb中直接写一段关于排序的代码,就是直接操作了,不需要再读入其它的地方去。若直接操作我就是中间排序的代码不知该如何去写。现在可以:
'对提取出来的数据进行排序操作
Sub TEST()
Dim a As String, b() As String
Dim filename As String
filename = ThisDrawing.Path + "\" + Split(ThisDrawing.Name, ".")(0) + ".txt"
Open filename For Binary As #1
'打开txt文件,文件名自己改
a = Input(LOF(1), #1)
'把整个txt文件的内容读入字符串变量a中
b = Split(a, vbCrLf)
'这时候b()数组中即包含了txt文件中的每行数据
'这样就可以对b()数组进行各种排序操作了
'具体如何排序就不知道了
'......
a = Join(b, vbCrLf)
'b()数组排序后重新组合为一个字符串a
Put #1, 1, a
'把处理后的数据重新写入文件
Close #1
End Sub
vbman2003 2010-10-10
  • 打赏
  • 举报
回复
要下班了,放下事情给你一个思路,本示例假设序号无重复(如果有重复,稍作修改同元素串接一下就行了),序号从1开始:

Private Sub Command1_Click()
Dim fileName As String
Dim lngFile As Long
Dim strFile As String
Dim arr() As String, arrSort() As String
Dim Idx As Long
Dim i As Long

'读出文件内容到strFile
fileName = "d:\test1.txt"
lngFile = FreeFile
Open fileName For Binary As lngFile
strFile = Space(LOF(lngFile))
Get #lngFile, , strFile
Close
'按行分组
arr = Split(strFile, vbCrLf)
'如果序号是从1开始的话如下处理
ReDim arrSort(UBound(arr))
arrSort(0) = arr(0)
For i = 1 To UBound(arr)
If Len(Trim(arr(i))) > 0 Then
Idx = Val(Mid(arr(i), 2)) '得到当前行的序号
If Idx > 0 Then arrSort(Idx) = arr(i) '赋值到排序数组序号对应下标的元素中
End If
Next
'写回新文件
fileName = "d:\test2.txt"
lngFile = FreeFile
Open fileName For Output As lngFile
Print #lngFile, Join(arrSort, vbCrLf)
Close
'运行结果
Shell "C:\Windows\NOTEPAD " & fileName, vbNormalNoFocus
End Sub


只是一个示例,提供一个思路,代码要优化完善...
vbman2003 2010-10-10
  • 打赏
  • 举报
回复
如果你数据前面的序号无重复,直接当作数组元素下标,序号后的内容作元素值,然后join一下就行了,效率更好...
vbman2003 2010-10-10
  • 打赏
  • 举报
回复
写到recordset中,用其sort方法排序,效率很不错的...
zx070x 2010-10-10
  • 打赏
  • 举报
回复
你傻啊?就不能写到数据库再排序?
single_dream 2010-10-10
  • 打赏
  • 举报
回复
我觉得可以这么做:把这些数据先按行读出来,然后再用;分割开,到数据库里边或者excel里,然后再按第一列排序就简单了。
xiaoshi2021 2010-10-10
  • 打赏
  • 举报
回复
能写一段代码吗?
jhone99 2010-10-10
  • 打赏
  • 举报
回复
用冒泡排序法

7,789

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧