大家好,我请教您们一个关于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,请大家帮帮我谢了

解决方案 »

  1.   

    读到数组里,然后用冒泡排序法排序,然后写入txt
      

  2.   

    这个是最最基础的了,大家都学习过了。
    ref:http://baike.baidu.com/view/254413.htm
      

  3.   

    按行读取记录,将读取出来的记录存入字符串变量,然后取第二位(mid),将其转为int 再定议一个数组变量,维数跟你TXT里面最大值相同,例如ARR(29),用于存放结果然后将读取的字符串,存入第二位转成的INT的数的变量组中即可,再用for循环依次输出到记事本!例如   MID(第二行,2,1)=8  存到 Arr(8) 中
      

  4.   


    Private Sub Command1_Click()
        Dim Arr, k%, Str$
        Dim Rs As Object    Open App.Path & "\Test.txt" For Input As #1
        Arr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf): Reset
        Set Rs = CreateObject("Adodb.Recordset")
        Rs.fields.append "A", 200, 256
        Rs.fields.append "B", 3, 4
        Rs.Open
        Rs.addnew
        Rs.fields("A") = Arr(0)
        Rs.fields("B") = 0    For k = 1 To UBound(Arr)
            Rs.addnew
            Rs.fields("A") = Arr(k)
            Rs.fields("B") = Split(Arr(k), ";")(1)
        Next
        Rs.Sort = "B Asc"    Arr = Rs.getrows
        Rs.Close: Set Rs = Nothing
        For k = 0 To UBound(Arr, 2)
            Str = Str & Arr(0, k) & vbCrLf
        Next    Open App.Path & "\Test0.txt" For Output As #1
        Print #1, Str: Reset
    End Sub
      

  5.   

    用VBReport报表设计终结,可以解决报表问题。
    http://www.xmiso.com/vbreport/dispbbs.asp?boardid=2&Id=2 
     
      

  6.   

    Rs.fields("B") = Split(Arr(k), ";")(1) ///////////////下标越界
      

  7.   

    见招解招 楼主只是针对目前工作所需来解决问题 如要达到 14F 所说的 通用性,谁那么空呢?真要达到通用性, 当然可行, 付费的话我来写以下代码 楼主 请自行建立一个 List1 将它的属性 Sorted 设为True
    除第一行的XXXXX....外 其它的将它们保存到 c:\test.txt
    如保存到文字变量 再来分割也行Dim aa$, i&, S
    Private Sub Command1_Click()
       Open "c:\test.txt" For Input As #1
       aa = StrConv(InputB(LOF(1), 1), vbUnicode)
       Close #1
       S = Split(aa, vbNewLine)
       List1.Clear
       For i = 0 To UBound(S)
          If Trim(S(i)) <> "" Then
             If Val(Mid(S(i), 2)) >= 10 Then
                List1.AddItem ";" & Mid(S(i), 2)
             Else
                List1.AddItem ";" & "0" & Mid(S(i), 2)
             End If
          End If
       Next i
       '*****************************
       Me.Cls
       Print "XXXXXX布置;XXXXXXX-0-0"
       For i = 0 To List1.ListCount - 1
          aa = List1.List(i)
          If Mid(aa, 2, 1) = "0" Then aa = ";" & Mid(aa, 3)
          Print aa
       Next i
    End Sub
      

  8.   

    直接用Excel或者UltraEdit读,排序,再保存。