求教,VB 在文本某行插入一大段文字

qq_39429431 2018-07-20 02:51:42
[H
VERSION="4.0 Alpha"
OP="1"
FM="1"
GP="0"
UP="0"
DW="0"
FW="800"
[001
l="1020.00"

b="473.00"

d="18.00"

FNX_EXP="0.00"

FNY_EXP="0.00"

AX_EXP="0.00"

AY_EXP="0.00"

ShowNonM="_mirror AND _ymirror OR _nonmirror AND _nonymirror"

ShowM="_mirror AND _nonymirror OR _ymirror AND _nonmirror"

ModusMirror="1"

bohrver="1"
KM=""
bohrhor="1"
KM=""
bohruni="1"
KM=""
bohren="1"
KM=""
fraesen="1"
KM=""
fsaegen="1"
KM=""
saegen="1"
KM=""
nuten="1"
KM=""
ktasche="1"
KM=""
rtasche="1"
KM=""
abblas="1"
KM=""
leimen="1"
KM=""
kappen="1"
KM=""
bfraesen="1"
KM=""
ziehkl="1"
KM=""
Platz1_8="_mirror AND _ymirror OR _nonmirror AND _nonymirror"
KM=""
Platz4_5="_mirror AND _nonymirror OR _ymirror AND _nonmirror"
KM=""
]1
$E0
KP
X=0.000
Y=0.000
Z=0.000
.X=0.000
.Y=0.000
.Z=0.000
$E1
KL
X=980.00
Y=0.000
Z=0.000
.X=980.00
.Y=0.000
.Z=0.000
$E2
KA
DS=1
R=40.000
X=1020.00
Y=38.00
Z=0.000
.X=1020.00
.Y=38.00
.Z=0.000
$E3
KL
X=1020.00
Y=473.00
Z=0.000
.X=1020.00
.Y=473.00
.Z=0.000
$E4
KL
X=0.000
Y=473.00
Z=0.000
.X=0.000
.Y=473.00
.Z=0.000
$E5
KL
X=0.000
Y=0.000
Z=0.000
.X=0.000
.Y=0.000
.Z=0.000
<100 \Werkstck\
LA="l"
BR="b"
DI="d"
FNX="FNX_EXP"
FNY="FNY_EXP"
RNX="0"
RNY="0.00"
RNZ="0"
AX="AX_EXP"
AY="AY_EXP"

<101 \Kommentar\
KM="HOMAG_PP VER: : 20, 0, 0, 45 "
KM="Name : L形架弧形侧板 "
KM="Date : 05.05.18 "
KM="Material : 曼Ae蛭⒘?8MM "
KM="Surftop : "
KM="Surfbot: "
KM="Material with grain !! "

<102 \BohrVert\
??="bohrver=1 "
BM="LS"
XA="458.00"
YA="54.00"
DU="5.00"
TI="8.50"
AN="1"
MI="0"
AB="32"

<102 \BohrVert\
??="bohrver=1 "
BM="LS"
XA="458.00"
YA="406.00"
DU="5.00"
TI="8.50"
AN="1"
MI="0"
AB="32"

<102 \BohrVert\
??="bohrver=1 "
BM="LS"
XA="25.00"
YA="54.00"
DU="15.00"
TI="14.20"
AN="1"
MI="0"
AB="32"

<102 \BohrVert\
??="bohrver=1 "
BM="LS"
XA="25.00"
YA="406.00"
DU="15.00"
TI="14.20"
AN="1"
MI="0"
AB="32"

!
文本内容如上,我需要在“<102 \BohrVert\”所在行之前,最后一个"KM="字段 所在之后插入<105 \Konturfraesen\
EA="1:0"
MDA="SEN"
STUFEN="0"
BL="0"
OSZI="0"
OSZVS="0"
ZSTART="0"
ANZZST="0"
RK="NoWRK"
EE="1:5"
MDE="SEN_AB"
EM="0"
RI="1"
TNO="130"
SM="0"
S_="STANDARD"
F_="5"
AB="-0.00"
AF="0"
VLS="0"
VLE="0"
ZA="d-6.0000"
HP="0"
SP="0"
YVE="0"
WW="1,2,3,401,402,403"
ASG="2"
KG="0"
RP="STANDARD"
RSEL="0"
RWID="0"
KAT="Router"
MNM="Router"
MX="0"
MY="0"
MZ="0"
MXF="1"
MYF="1"
MZF="1"
??="fraesen=1 "
求大神相助
...全文
269 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39429431 2018-07-21
  • 打赏
  • 举报
回复
引用 5 楼 Chen8013 的回复:
给你一个简单的代码参考。

假设:
源数据在文件 a1.txt, 要“插入的内容”在文件 a2.txt , 将“组合结果”输出到 a3.txt 。
Option Explicit

Private Sub Command1_Click()
Dim arrBuff() As Byte
Dim arrText() As String
Dim strTemp As String
Dim p1&, p2 As Long
Dim i&, w As Long

' 读取源数据1:
Open "E:\Temp\a1.txt" For Binary As #1
w = LOF(1)
ReDim arrBuff(w - 1)
Get #1, , arrBuff()
Close
strTemp = StrConv(arrBuff(), vbUnicode)
arrText = Split(strTemp, vbCrLf)
' 读取源数据2:
Open "E:\Temp\a2.txt" For Binary As #1
w = LOF(1)
ReDim arrBuff(w - 1)
Get #1, , arrBuff()
Close
strTemp = StrConv(arrBuff(), vbUnicode)
' 找第1个 <102 \BohrVert\ 的位置:
w = UBound(arrText())
For i = 0 To w
'If ("<102 \BohrVert\" = arrText(i)) Then
If ("<102" = Left$(arrText(i), 4&)) Then
p1 = i
Exit For
End If
Next
' 找“第1个 <102 \BohrVert\”之前的最后一个“KM=”:
If (-1 = p1) Then
MsgBox "没找到关键行:<102 \BohrVert\", 64
Exit Sub
End If
For i = p1 To 0 Step -1
If ("KM=" = Left$(arrText(i), 3&)) Then
p2 = i
Exit For
End If
Next
' 将“组合内容”输出到文件3:
Open "E:\Temp\a3.txt" For Output As #1
For i = 0& To p2
Print #1, arrText(i) ' 输出“前半部分”
Next
Print #1, strTemp ' 输出“插入内容”
For i = 1& + p2 To w
Print #1, arrText(i) ' 输出“后半部分”
Next
Close
End Sub

那个&是什么意思?
舉杯邀明月 2018-07-21
  • 打赏
  • 举报
回复
我写的代码,在一般情况下“整数”都用Long(VB6默认“整数”为Integer), 有特定要求时,则使用相应的“合适类型”。
舉杯邀明月 2018-07-21
  • 打赏
  • 举报
回复
在 Dim语句中,变量名后面加 & ,等效于 As Long 。
在“数值常数”后加& ,表示那个数值强制指定为 Long类型,
 不加的话,VB6依次按 integer ---> Long ---> Double处理,哪个类型能“包含”它,那它就是哪个类型。
舉杯邀明月 2018-07-20
  • 打赏
  • 举报
回复
给你一个简单的代码参考。

假设:
源数据在文件 a1.txt, 要“插入的内容”在文件 a2.txt , 将“组合结果”输出到 a3.txt 。
Option Explicit

Private Sub Command1_Click()
Dim arrBuff() As Byte
Dim arrText() As String
Dim strTemp As String
Dim p1&, p2 As Long
Dim i&, w As Long

' 读取源数据1:
Open "E:\Temp\a1.txt" For Binary As #1
w = LOF(1)
ReDim arrBuff(w - 1)
Get #1, , arrBuff()
Close
strTemp = StrConv(arrBuff(), vbUnicode)
arrText = Split(strTemp, vbCrLf)
' 读取源数据2:
Open "E:\Temp\a2.txt" For Binary As #1
w = LOF(1)
ReDim arrBuff(w - 1)
Get #1, , arrBuff()
Close
strTemp = StrConv(arrBuff(), vbUnicode)
' 找第1个 <102 \BohrVert\ 的位置:
w = UBound(arrText())
For i = 0 To w
'If ("<102 \BohrVert\" = arrText(i)) Then
If ("<102" = Left$(arrText(i), 4&)) Then
p1 = i
Exit For
End If
Next
' 找“第1个 <102 \BohrVert\”之前的最后一个“KM=”:
If (-1 = p1) Then
MsgBox "没找到关键行:<102 \BohrVert\", 64
Exit Sub
End If
For i = p1 To 0 Step -1
If ("KM=" = Left$(arrText(i), 3&)) Then
p2 = i
Exit For
End If
Next
' 将“组合内容”输出到文件3:
Open "E:\Temp\a3.txt" For Output As #1
For i = 0& To p2
Print #1, arrText(i) ' 输出“前半部分”
Next
Print #1, strTemp ' 输出“插入内容”
For i = 1& + p2 To w
Print #1, arrText(i) ' 输出“后半部分”
Next
Close
End Sub

qq_39429431 2018-07-20
  • 打赏
  • 举报
回复
@舉杯邀明月我其他的都写好了,就是求从开头找第1个“<102 \BohrVert\”所在的元素号(p1),
再“反向”查找含有"KM="字段的元素号(p2)这段代码不知道怎么写
qq_39429431 2018-07-20
  • 打赏
  • 举报
回复
引用 1 楼 Chen8013 的回复:
先把“原始内容”,按“行”分解到字符串数组中(如果是“文件”,可按行读取),
然后从开头找第1个“<102 \BohrVert\”所在的元素号(p1),
再“反向”查找含有"KM="字段的元素号(p2)。

然后就可以重新组织文本(或重新写入文件)了。
写入文件:
  从数组第1个元素到p2元素 →For循环写入;
  写入要“插入”的文本;
  从数组(p2 +1)到最后一个元素 →For循环写入; 此时已经完成。
如果是重新组织文本字符串,把上面“写入文件”换成“字符串连接”的操作就行了。

能说一下相应的代码吗?
qq_39429431 2018-07-20
  • 打赏
  • 举报
回复
"<105\Konturfraesen\" & vbCrLf + "EA=""1:0""" & vbCrLf + "MDA=""SEN""" & vbCrLf + "STUFEN=""0""" _
& vbCrLf + "BL=""0""" & vbCrLf + "OSZI=""0""" & vbCrLf + "OSZVS=""0""" & vbCrLf + "ZSTART=""0""" & vbCrLf + "ANZZST=""0""" _
; "RK=""NoWRK""" & vbCrLf + "EE=""1:5""" & vbCrLf + "MDE=""SEN_AB""" & vbCrLf + "RI=""1""" _
& vbCrLf + "TNO=""130""" & vbCrLf + "S_=""STANDARD""" & vbCrLf + "F_=""5""" & vbCrLf + "AB=""-0.00""" & vbCrLf + "AF=""0""" _
& vbCrLf + "VLS=""0""" & vbCrLf + "VLE=""0""" & vbCrLf + "ZA=""d-6.0000""" & vbCrLf + "HP=""0""" _
& vbCrLf + "SP=""0""" & vbCrLf + "YVE=""0""" & vbCrLf + "WW=""1,2,3,401,402,403""" _
& vbCrLf + "ASG=""2""" & vbCrLf + "KG=""0""" & vbCrLf + "RP=""STANDARD""" & vbCrLf + "RSEL=""0""" _
& vbCrLf + "RWID=""0""" & vbCrLf + "KAT=""Router""" & vbCrLf + "MNM=""Router""" _
& vbCrLf + "MX=""0""" & vbCrLf + "MY=""0""" & vbCrLf + "MZ=""0""" & vbCrLf + "MXF=""1""" & vbCrLf + "MYF=""1""" _
& vbCrLf + "MZF=""1""" & vbCrLf + "??=""fraesen=1"""
这是我要插入的字符串,
舉杯邀明月 2018-07-20
  • 打赏
  • 举报
回复
先把“原始内容”,按“行”分解到字符串数组中(如果是“文件”,可按行读取),
然后从开头找第1个“<102 \BohrVert\”所在的元素号(p1),
再“反向”查找含有"KM="字段的元素号(p2)。

然后就可以重新组织文本(或重新写入文件)了。
写入文件:
  从数组第1个元素到p2元素 →For循环写入;
  写入要“插入”的文本;
  从数组(p2 +1)到最后一个元素 →For循环写入; 此时已经完成。
如果是重新组织文本字符串,把上面“写入文件”换成“字符串连接”的操作就行了。

7,762

社区成员

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

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