替换目录下多个文件中符合特定条件的字符串

时间:2021-05-04 08:59:36
一个文件目录下有多个文件,但无文件后缀,可用文本格式打开.文件格式每行80个字符,每行开始为空格

要求:替换文件中以 L2字符开头的行中的全部空格为2(L2之前还有一空格)
以L10开头行中的-和. 为2(L10之前还有一空格)

例:将文件中L1开头行中间的空格全换为2
 L0001        E0970600712271032NNG  LDZ                 09       
 L110510010100120        0482002201660000000000000000105110511051   

在VB中如何实现啊

10 个解决方案

#1


怎么没人回复呢,高手们帮帮忙啊.我可以再加分的

#2


估计大家和我一样,听不懂

#3


...是不是我的脑袋不太好使了...说真的,没看明白你的意思...

#4


每个文件中有很多行,我的目标就是查找以L2开头的这一行,把这一行中间一段的"空格"替换成数字2,文件格式特殊,每行第一个字符为空格,中间有一段为空格,结尾有一段空格.
你用文本打开并选定其中一行,可以看出一行有80个字符.

例子:下划线处为空格,每行只有80个字符(包括空格),我要把L2这行中间这段空格替换成2,把L10开头的这行中的 . 和 - 替换成 3,也就是遍历整个文件,查找特殊位置,再进行替换

_L23213131_________4564564643453534_____
_L3321313198798978794564564643453534____
_L10.3-131319879___8794564564643453534as

#5


材料:
1个 文件列表框  filelistbox
1个 命令按钮    commandbox
步骤:
>>复制楼主的几个文件到 c:\1\目录下[没有就建立一个名字为"1"的文件]
>>设计程序
>>放入2个控件
>>引用 "microsoft scripting runtime" 是引用系统操作文件夹或文件的一个对象
  引用了它以后我们可以删除或建立文件或者文件夹
>>放入代码:

Dim sfo As New FileSystemObject  '引用后用这句声明出文件操作的一个对象
Private Sub Command1_Click()
If sfo.FolderExists("c:\2") = False Then sfo.CreateFolder ("c:\2")
'↑判断若c盘下没有名为2的文件夹则创建它
For i = 0 To File1.ListCount - 1  '循环文件列表下的所有文件
If InStr(File1.List(i), ".") = 0 Then '若发现没有文件后缀的就执行面代码
    Open File1.Path & "\" & File1.List(i) For Input As #1  '打开
        Do While EOF(1) = False    '循环,没有读完就继续读
            Line Input #1, a  '按每行读取 存储到变量 a  中
            If Left(a, 3) = " L2" Then  '若是以 “ L2” 开头 则
                For j = 1 To Len(a)
                '↑循环次数为a的字符数 这个循环是为了确保所有的字符都被转换过
                    a = Replace(a, " ", "2")   '替换条件为“ ”空格换为字串“2”
                Next j
            ElseIf Left(a, 4) = " L10" Then  '若是以 " L10" 开头 则
                For k = 1 To Len(a)      '循环
                    a = Replace(a, ".", "2")   '替换 “.” 为 “2”
                    a = Replace(a, "-", "2")   '替换 “-” 为 “2”
                Next k
            Else
            a = a                         '若不符合条件 就不用改它了
            End If
        s = s & a & vbCrLf   '把读的每行[修改过的]存储在新的一个变量 S 中
        Loop
    Close #1    ' 关闭文件的读取
    Open "c:\2\" & File1.List(i) For Output As #2
    '↑output 写入文件 没有则自动建立该文件 当然我们要提供路径
    Print #2, s    '把 变量 S 写入 新的文件
    Close #2       '关闭文件的写入
    s = ""         '清空变量 以便下次存储新的数据
End If
Next i

End Sub

Private Sub Form_Load()
File1.Path = "c:\1"     '设置文件列表所要显示的文件夹
File1.Visible = False   '不可见
End Sub



改动过的文件存储在了 c:\2\目录下

我要 50 分 ^_^

#6


5楼 (is me)
实验结果: 
完全符合楼主要求
以" L2"字符开头的行中的全部空格替换为"2"
以" L10"开头行中的"-"和"."替换为"2" 

#7


好像是把一行的空格开始的后面的字符串都替换掉了
还有每行第一个空格不能替换,

#8


cike_1111你的方案部分可行,但是你没注意每行有三段空格
行首一个,行中一段,行尾一段,我只要求换掉行中的一段空格,你是把一行中所有空格都换了

#9


看过Cike_1111的帮助,再经过我修改,已能达到替换中间一段的空格,而不替换行首及行尾的空格了,

不使用循环(查出每行第二段空格有九个)将这段
               For j = 1 To Len(a)
             a = Replace(a, " ", "2")   
                Next j
    改为
        b = Replace(a, " ", "2", 2, 9)'从字符串的第二个字符开始连续替换九次
        a = " " & b                   '然后再把行首的空格补上

再小小的修改就可以了,非常感谢大家!!!

#10



我不知道帖子加分每次要100,我没那么多分,下次补偿你吧cike_1111

#1


怎么没人回复呢,高手们帮帮忙啊.我可以再加分的

#2


估计大家和我一样,听不懂

#3


...是不是我的脑袋不太好使了...说真的,没看明白你的意思...

#4


每个文件中有很多行,我的目标就是查找以L2开头的这一行,把这一行中间一段的"空格"替换成数字2,文件格式特殊,每行第一个字符为空格,中间有一段为空格,结尾有一段空格.
你用文本打开并选定其中一行,可以看出一行有80个字符.

例子:下划线处为空格,每行只有80个字符(包括空格),我要把L2这行中间这段空格替换成2,把L10开头的这行中的 . 和 - 替换成 3,也就是遍历整个文件,查找特殊位置,再进行替换

_L23213131_________4564564643453534_____
_L3321313198798978794564564643453534____
_L10.3-131319879___8794564564643453534as

#5


材料:
1个 文件列表框  filelistbox
1个 命令按钮    commandbox
步骤:
>>复制楼主的几个文件到 c:\1\目录下[没有就建立一个名字为"1"的文件]
>>设计程序
>>放入2个控件
>>引用 "microsoft scripting runtime" 是引用系统操作文件夹或文件的一个对象
  引用了它以后我们可以删除或建立文件或者文件夹
>>放入代码:

Dim sfo As New FileSystemObject  '引用后用这句声明出文件操作的一个对象
Private Sub Command1_Click()
If sfo.FolderExists("c:\2") = False Then sfo.CreateFolder ("c:\2")
'↑判断若c盘下没有名为2的文件夹则创建它
For i = 0 To File1.ListCount - 1  '循环文件列表下的所有文件
If InStr(File1.List(i), ".") = 0 Then '若发现没有文件后缀的就执行面代码
    Open File1.Path & "\" & File1.List(i) For Input As #1  '打开
        Do While EOF(1) = False    '循环,没有读完就继续读
            Line Input #1, a  '按每行读取 存储到变量 a  中
            If Left(a, 3) = " L2" Then  '若是以 “ L2” 开头 则
                For j = 1 To Len(a)
                '↑循环次数为a的字符数 这个循环是为了确保所有的字符都被转换过
                    a = Replace(a, " ", "2")   '替换条件为“ ”空格换为字串“2”
                Next j
            ElseIf Left(a, 4) = " L10" Then  '若是以 " L10" 开头 则
                For k = 1 To Len(a)      '循环
                    a = Replace(a, ".", "2")   '替换 “.” 为 “2”
                    a = Replace(a, "-", "2")   '替换 “-” 为 “2”
                Next k
            Else
            a = a                         '若不符合条件 就不用改它了
            End If
        s = s & a & vbCrLf   '把读的每行[修改过的]存储在新的一个变量 S 中
        Loop
    Close #1    ' 关闭文件的读取
    Open "c:\2\" & File1.List(i) For Output As #2
    '↑output 写入文件 没有则自动建立该文件 当然我们要提供路径
    Print #2, s    '把 变量 S 写入 新的文件
    Close #2       '关闭文件的写入
    s = ""         '清空变量 以便下次存储新的数据
End If
Next i

End Sub

Private Sub Form_Load()
File1.Path = "c:\1"     '设置文件列表所要显示的文件夹
File1.Visible = False   '不可见
End Sub



改动过的文件存储在了 c:\2\目录下

我要 50 分 ^_^

#6


5楼 (is me)
实验结果: 
完全符合楼主要求
以" L2"字符开头的行中的全部空格替换为"2"
以" L10"开头行中的"-"和"."替换为"2" 

#7


好像是把一行的空格开始的后面的字符串都替换掉了
还有每行第一个空格不能替换,

#8


cike_1111你的方案部分可行,但是你没注意每行有三段空格
行首一个,行中一段,行尾一段,我只要求换掉行中的一段空格,你是把一行中所有空格都换了

#9


看过Cike_1111的帮助,再经过我修改,已能达到替换中间一段的空格,而不替换行首及行尾的空格了,

不使用循环(查出每行第二段空格有九个)将这段
               For j = 1 To Len(a)
             a = Replace(a, " ", "2")   
                Next j
    改为
        b = Replace(a, " ", "2", 2, 9)'从字符串的第二个字符开始连续替换九次
        a = " " & b                   '然后再把行首的空格补上

再小小的修改就可以了,非常感谢大家!!!

#10



我不知道帖子加分每次要100,我没那么多分,下次补偿你吧cike_1111