| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1392 人关注过本帖, 1 人收藏
标题:求助,对TXT文件的复杂操作怎么写?
只看楼主 加入收藏
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
结帖率:70%
收藏(1)
已结贴  问题点数:20 回复次数:6 
求助,对TXT文件的复杂操作怎么写?
附件中的“原始文件.TXT”就是准备用来操作的TXT文件。
原始文件.rar (1.12 KB)


先说明一下原始文件的结构,如果用UltraEdit软件打开原始文本,则可以理解得更清楚:

1、第1行到第14行(含第14行)是文件头,格式与行数不会变,最多“冒号”后面的字符串会根据输入的部件型号或部件批次发生改变。

2、第15行到第46行(含第46行)为第一个部件的检查参数;
   第47行到第62行(含第62行)为第二个部件的检查参数;
   第63行到第82行(含第82行)为第三个部件的检查参数;
   第83行到第114行(含第114行)为第四个部件的检查参数;
   第115行到第146行(含第146行)为第五个部件的检查参数;
     
     每个部件的检查参数的行数不一定会相等
     本文本文件只截取了5个部件的的检查参数,可能会有成百上千个部件的检查参数在同一个文件。
     
3、如果更换不同的部件,检查参数的项目不同,检查参数的行数更会有所不同。

下面要说一下想要达到的结果:
从头(第一行)开始搜寻“ Site    Sort     Bin”行,如果再往下数的第二行的第三个数字不是1,则再往下数一行(即第四行,就是长==================行),从这一行开始,向上(往回)删除到第一个包含“    Device#: ”行(包括这一行删除),然后继续向下再一个循环。

举例说明:打开原始文件.TXT,从头开始搜寻“ Site    Sort     Bin”行,然后再往下数两行,也就是第45行,第三个数字是1,满足“是1”的条件,则继续向下搜寻“ Site    Sort     Bin”行,然后再往下数两行,也就是第61行,第三个数字不是1,不满足条件,则再往下数一行(即第62行),从62行往回删,一直删到第一个包含“    Device#: ”行,也就是第47行(包括这一行都删掉),也就是删掉这个部件的所有检查参数,然后再往下寻找,满足条件就彻底删除某一部件的全部参数数据;
搜索更多相关主题的帖子: 字符串 软件 型号 
2017-03-30 16:31
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:941
专家分:5244
注 册:2015-8-10
收藏
得分:20 
这个就是逐行读入,然后判断。主要函数就是
1 文件操作函数:Open、Close、 Line input
2.字符串函数:inStr、 Left、 Trim、 Split等
3.基本的do、for 、if 等等
程序代码:
Open "C:\1.txt" for input as #1
Do while not EOF(1)
Line input  #1, a
If instr(a,"Device#:")>0 then 

 Dev_ID= right(a, len(a)-instr(a,"Device#:")) '获取Device#:后面的编号
End if 
ENDDO
Close #1


读取上面的代码了,你帖子上没写要干嘛,其他的你自己照着编。
另外,你同一个设备有不同的测试项目,还需要区别对待。总之,你自己必须先找到规则,要不代码上不可能实现
  Number Site Result    Test Name     Pin   Channel     Low          Measured          High           Force        Loc
       0   0    PASS             CON   R1AOUT      94      -1.0000 V   -482.2496 mV   -200.0000 mV   -100.0000 uA       0
  Number Site Result    Test Name     Pattern
     104   0    PASS           FUN.0             FUN
2017-03-30 18:00
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
收藏
得分:0 
可能是我太啰嗦没说明白。主要是想知道,找到某个位置后,例如“ Site    Sort     Bin”行后,如何再读取往下往下两行的某个位置的数值,经判断后,然后再从下一行算起,往回删除到某一行的写法。谢谢。

[此贴子已经被作者于2017-3-30 18:42编辑过]

2017-03-30 18:41
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:941
专家分:5244
注 册:2015-8-10
收藏
得分:0 
一样的,可以先把所有内容存放在一个动态数组中
程序代码:
Dim a() 
dim k as integer
k=0
Open "C:\1.txt" for input as #1
Do while not EOF(1)
redim preserve a(k) 
Line input  #1, a(k)
k=k+1
ENDDO
Close #1
……

For i=lbound(a) to ubound(a)-2 '这里不必也不能到上限
 If instr(a(i),"Site    Sort     Bin" )>0 and a(i+2)="这个地方自己写,如果比较复杂可以写成函数" then  '判断语句,就是你
  '往回删除到某一行的代码
 end if
Next i 
2017-03-30 19:28
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:941
专家分:5244
注 册:2015-8-10
收藏
得分:0 
忘记说了,open不能打开一个文件读取的同时修改它,你可以在关闭这个文件之后再将a(i)数组写入即可。
另外,'往回删除到某一行的代码 这里未必是删,可以加入特殊字符用来标记是否输出
比如 a(i)=a(i)+ "此行不输出" ,然后用输出的时候用instr判断一下就可跳过
2017-03-30 19:34
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
收藏
得分:0 
继续请教版主和其他前辈高人:
读TXT文件,判断什么的,目前看起来没什么问题,也能确定要删除的行号(起止行号都能确定下来),但现在问题是,如何删除这些行,我写的删除这段程序似乎有问题,达不到预期目的,请帮看一看并帮助修改。

数据操作.rar (4.34 KB)
附件为源程序和实验文本。下面飘红的那段有问题。

Private Sub Command1_Click()
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""


Label2.Caption = Dir1.Path & "\" & File1.FileName


Dim a As Long
Dim yjg As String
Dim cpm As String
a = 0
Open (Dir1.Path & "\" & File1.FileName) For Input As #1
Do Until EOF(1)
Line Input #1, yjg
For i = 1 To Len(yjg)
If Mid$(yjg, i, 1) = "#" Then
a = a + 1
End If
Next i
Loop
Close #1
Label4.Caption = "共有" & a & "个的数据"



End Sub

Private Sub Command2_Click()
Dim h As Long, LTxt As String, wjt As Variant, wjw As Variant, binz As Variant, MaxDate As Date, FindLine As Long, bin() As Byte
Dim temp
h = FreeFile
Dim N As Long, m As Long, o As Long
Open (Dir1.Path & "\" & File1.FileName) For Input As h
Do While Not EOF(h)

    Line Input #h, LTxt
      
    N = N + 1 '对应Device#       Dim wjt
    o = o + 1 '对应Bin           Dim binz
'    m = m + 1 '对应==========    Dim wjw

    wjt = Split(LTxt, "Device#:")
    binz = Split(LTxt, " Site    Sort     Bin")
'    wjw = Split(LTxt, "=========================================================================")
   
    If UBound(wjt) = 1 Then
'                MsgBox "Device#:在" & n & " 行"
                Text1.Text = N
    End If
   
        If UBound(binz) = 1 Then
'                MsgBox " Site    Sort     Bin在" & o + 2 & " 行"
                Text3.Text = o + 3   'MsgBox " "========================================================================="在" & o + 3 & " 行"
                Text2.Text = o + 2   'MsgBox " Site    Sort     Bin在" & o + 2 & " 行"
                Text5.Text = Val(Text3.Text) - Val(Text1.Text) + 1
              
    End If
   
     If o = Val(Text2.Text) Then
                 temp = Split(LTxt, "   ")
                Text4.Text = temp(5)
     End If

   
   
    If Val(Text4.Text) > 1 And Val(Text3.Text) = Val(Text2.Text) + 1 And Val(Text3.Text) > Val(Text1.Text) Then
    MsgBox "从" & Val(Text1.Text) & "行到" & Val(Text3.Text) & "行由于Bin值为" & Val(Text4.Text) & ",这段行数可以被删除,共" & Val(Text5.Text) & "行。"
   
   
   
    Close
Dim arr, c As Long, d As Long
    For m = Val(Text3.Text) To Val(Text1.Text) '想倒着删,正着删的话,删掉一行部件参数尾部的行数就发生了变化。

    Open (Dir1.Path & "\" & File1.FileName) For Input As #1
    arr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbNewLine)
    Close #1

    N = m '删除第2行
    Open "c:\123.txt" For Output As #1
    For c = 0 To UBound(arr)
        If c <> d - 1 Then Print #1, arr(c)
    Next
    Close #1
m = m - 1
Next m
Open (Dir1.Path & "\" & File1.FileName) For Input As h
    End If

   

Loop
Close
 MsgBox "结束"

End Sub

Private Sub Dir1_Change()
    File1.Path = Dir1.Path

End Sub

Private Sub Drive1_Change()
    Dir1.Path = Drive1.Drive
End Sub

Private Sub File1_DblClick()
    Call Command1_Click

End Sub

[此贴子已经被作者于2017-4-2 16:25编辑过]

2017-04-02 16:21
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
收藏
得分:0 
求助,从第6楼开始是结贴后新提出的问题,请版主和各位大神帮助,一个TXT文件,想要删除其中的从第x行到第y行(例如第5行到第10行),这段语句应该怎么写?估计得倒着删,从第10行删到第五行,正着删的话,删掉第五行后原来的第10行就变成第9行了。
再次恳请路过的各位前辈帮助,我的程序就卡在这里好几天了,请给出一段源码。
2017-04-03 00:04
快速回复:求助,对TXT文件的复杂操作怎么写?
数据加载中...
 
   



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

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