发新话题
打印

[基础] 如何从 *.txt 文件中根据条件读出某一行?

如何从 *.txt 文件中根据条件读出某一行?

请问:如何从 *.txt 文件中根据条件读出某一行?
如果从如下文件中读出以“德固赛3”开头的这一行,而该行的位置不是固定的,有时第5行,有时第2行或第6行……
单位      日期        其他
德固赛1 2008-3-5 ……0
德固赛4 2008-3-6 ……1
德固赛9 2008-3-7 ……2
德固赛6 2008-3-8 ……3
德固赛8 2008-3-9 ……4
德固赛3 2008-3-10 ……5
德固赛5 2008-3-11 ……6
德固赛2 2008-3-12 ……7
德固赛10 2008-3-13 ……8
德固赛7 2008-3-14 ……9

附件

单位.rar (203 Bytes)

2008-3-5 19:17, 下载次数: 495

TOP

先从头到尾读文件,只到读出前四个字等于"德固赛3"
例如
do while not eof(1)
line input #1,str
if left(str,4)="德固赛3" then
exit do
end if
loop
换个头像,看见广告就眼红,直接封ID。

TOP

好,按你的指点很容易的就达到了要求,谢谢!

TOP

1楼的问题在2楼已经解决。
如果1楼的问题再延伸一下:
如果从文件中能找到以“德固赛3”开头的这一行,就将这一行改写为以“G_德固赛3”开头;
如找不到以“德固赛3”开头的这一行,则将“德固赛3 ……”添加在末行。
谢谢!

TOP

加一个变量判断一下呗,如果找到,将这个变量付值为True,否则为Flase,然后将文件重新读写一遍就可以了。

TOP

谢谢回复!
我将代码修改成如下,虽能达到要求,但觉得有点曲里拐弯的

   Open App.Path & "\Ket.txt" For Input As #1
   sIni() = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbLf)
   Close #1
   
   Do While i < UBound(sIni)
      If Split(sIni(i), ":")(0) = "德固赛3" Then
         sIni(i) = "德固赛3" & ":" & sKSub & ":" & sK & ":" & sKScale
         bFlag = True: Exit Do
      End If
      i = i + 1
   Loop
   
   If bFlag Then
      Open App.Path & "\Ket.txt" For Output As #1
      Print #1, Join(sIni, vbLf)
      Close #1      '重写Ket.txt
   Else
      Open App.Path & "\Ket.txt" For Append As #1
      Print #1, "德固赛3" & ":" & sKSub & ":" & sK & ":" & sKScale
      Close #1
   End If

TOP

能达到目的就是好代码
换个头像,看见广告就眼红,直接封ID。

TOP

发新话题