刚学VB两个星期,就被老板派了任务。这两天实在搞得焦头烂额,请大家帮忙!for example:
打开一个文本文档,
....
Boundary Scan Disables ON;
Ground Bounce Suppression OFF;CAPACITOR
C1 1.47u 10 10 f;
C2 1.47u 10 10 f;
C3 1.47u 10 10 f;
C4 1.47u 10 10 f;INDUCTOR
FL1 1m 10 10 1 f;
FL2 1m 10 10 1 f;
FL3 1m 10 10 1 f;
...当我查找CAPACITOR时,能统计一下CAPACITOR下面的电容个数,比如现在就是4个。
当我查找INDUCTOR时,能统计一下INDUCTOR下面的电感个数,比如现在就是3个。万分感谢各位!最好能把代码上来
打开一个文本文档,
....
Boundary Scan Disables ON;
Ground Bounce Suppression OFF;CAPACITOR
C1 1.47u 10 10 f;
C2 1.47u 10 10 f;
C3 1.47u 10 10 f;
C4 1.47u 10 10 f;INDUCTOR
FL1 1m 10 10 1 f;
FL2 1m 10 10 1 f;
FL3 1m 10 10 1 f;
...当我查找CAPACITOR时,能统计一下CAPACITOR下面的电容个数,比如现在就是4个。
当我查找INDUCTOR时,能统计一下INDUCTOR下面的电感个数,比如现在就是3个。万分感谢各位!最好能把代码上来
Private Sub Command1_Click()
Dim a As String
Dim b As Integer
Open "d:\1.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, a
If Mid(a, 3, 1) = "C" Then b = b + 1
If Mid(a, 3, 1) = "F" Then c = c + 1
Loop
Close #1
MsgBox "电容有" & b & "个," & "电感有" & c & "个。"
End Sub
命名不一定是最上面1234的哪种规则。
不过我只需要统计一下各种器件的数量就可以啦。
在CAP下每行代表一个器件。
我现在把文件按行转化成一个字符串数组,再去比较但是就不会了。多谢各位!!!以下是部分源文件:
GLOBAL OPTIONS
Fixture Type EXPRESS;
Fixture Size BANK2;
Top Probes Allowed OFF;
Heavy Probe Force 8;
Light Probe Force 4;
Mechanical Density Threshold 800;
Vacuum Density Threshold 104;
Autofile 4094;
Test Strategy COMBINATIONAL;
WireWrapping AUTO;
Metric Units OFF;
Common Lead Resistance 0.5; ! (ohms) from probe to component.
Common Lead Inductance 1u; ! (Henries) from probe to component.
Capacitance Compensation ON;
........CAPACITOR
C1 10n 80 20 f PN"0160-3847" "CAP .01U";
C2 10n 80 20 f PN"0160-3847" "CAP .01U";
C2H2 100n 10 10 f PN"0160-3847" "CAP .1U";
C2L2 100p 10 10 f PN"0160-3844" "CAP 100p";
C3 10n 80 20 f PN"0160-3847" "CAP .01U";
C4 10n 80 20 f PN"0160-3847" "CAP .01U";
C5 10n 80 20 f PN"0160-3847" "CAP .01U";
C6 10n 80 20 f PN"0160-3847" "CAP .01U";
c7 1u 10 10 f AUTO PN"0810-0296";
C201 10n 80 20 f PN"0160-3847" "CAP .01U";
C202 10n 80 20 f PN"0160-3847" "CAP .01U";
C203 10n 80 20 f PN"0160-3847" "CAP .01U";CONNECTOR
J1 PN"1200-0446" TJ AUTO "Conn. 16_Pin";PIN LIBRARY
RP1 PN"1910-0033" "Rpack 33";
RP2 PN"1910-0033" "Rpack 33";
RP3 PN"1910-0033" "Rpack 33";
RP4 PN"1910-0033" "Rpack 33";
RP5 PN"1910-0033" "Rpack 33";
RP6 PN"1910-1000" "Rpack 1K";
SW1 NT PN"1234-4321" "FLTSW 16-pin";
SW2 NT PN"1234-4321" "FLTSW 16-pin";
SW3 NT PN"7777-8888" "FLTSW 8-pin";
SW4 NT PN"7777-8888" "FLTSW 8-pin";
SW5 NT PN"7777-8888" "FLTSW 8-pin";
U1 PN"74ACT00" TJ LIB AUTO "Nand_4";
U2 PN"74F244" TJ LIB AUTO "Buffer";
U3 PN"74F244" TJ LIB AUTO "Buffer";
U4 PN"74LS173" TJ LIB AUTO "Latch_4";
U5 PN"74LS173" TJ LIB AUTO "Latch_4";
U6 PN"74F244" TJ LIB AUTO "Buffer";
Y1 PN"1813-0616" "20MHz OSC";RESISTOR
R1 1k 10 10 f PN"0757-0280" "Res. 1K";
R2 1k 10 10 f PN"0757-0280" "Res. 1K";
R2H2 12.1k 1 1 f PN"0757-0280" "Res 12.1k";
R2H4 12.1k 1 1 f PN"0757-0280" "Res 12.1k";
R2L2 7.6k 1 1 f PN"0757-0280" "Res 7.6k";
R2L4 7.6k 1 1 f PN"0757-0280" "Res 7.6k";
R3 1k 10 10 f PN"0757-0280" "Res. 1K";
R4 1k 10 10 f PN"0757-0280" "Res. 1K";
R5 1k 10 10 f PN"0757-0280" "Res. 1K";
R6 10 10 10 f PN"0757-0346" "Res. 10";
R7 10 10 10 f PN"0757-0346" "Res. 10";
R8 10k 10 10 f PN"0757-0442" "Res 10K";
R201 5.1k 10 10 f PN"0757-0499" "Res 5.1k";
R202 10k 10 10 f PN"0757-0442" "Res 10K";
如果上G的就用大型数据库。
如果数据量在64K以上,用XML也是很方便的,当然数据格式也要改成XML的格式如果是非常小的可以用 InStr 函数搜索字符串,
而且你的文件格式最好也改改,方便查找。
比如:
....
[$ATTRIB]
BCD = ON //Boundary Scan Disables
GBS = OFF //Ground Bounce Suppression[$CAPACITOR]
Capacitor = "C1","1.47u","10","10","f"
Capacitor = "C2","1.47u","10","10","f"
Capacitor = "C3","1.47u","10","10","f"
Capacitor = "C4","1.47u","10","10","f"[$INDUCTOR]
Inductor = "FL1","1m","10","10","1","f"
Inductor = "FL2","1m","10","10","1","f"
Inductor = "FL3","1m","10","10","1","f"
....
比如你把文本读到一个字符串变量里:Dim TextInfo As String, LineText As String, IsOneLine As Long
IsOneLine = 0
Open "C:\1.txt" For Input As #1
Do While Not EOF(1)
Line Input#1, LineText
LineText = Trim(LineText) '将前后多余的空格符去掉
'判断不是空行就加入数据中
If Len(LineText) > 0 Then
If IsOneLine = 0 Then
TextInfo = LineText
IsOneLine = 1
Else
TextInfo = TextInfo & vbCrLf & LineText
End If
End If
Loop
Close #1然后你可以用InStr查找所需的段落:Dim SLong As Long, ELong As Long, ParagraphStr As String
Dim StrArray() As String, SearchParagraph As String
SearchParagraph = "[$CAPACITOR]"
'找到段落的开头
SLong = InStr(1, TextInfo, SearchParagraph, vbTextCompare)
'找到段落的结尾
ELong = InStr(SLong + 1, TextInfo, "[$", vbTextCompare)
If ELong = 0 Then
ParagraphStr = Right(TextInfo, Len(TextInfo) - SLong)
Else
'提取出段落全部内容
ParagraphStr = Mid(TextInfo, SLong, ELong - SLong - 1)
End If
'这时ParagraphStr的内容因该是:
'[$CAPACITOR]
'Capacitor = "C1","1.47u","10","10","f"
'Capacitor = "C2","1.47u","10","10","f"
'Capacitor = "C3","1.47u","10","10","f"
'Capacitor = "C4","1.47u","10","10","f"'将提取出的内容以行为单位分割成字符串数组
StrArray = Split(ParagraphStr, vbCrLf)
MsgBox SearchParagraph & "的个数是" & UBound(StrArray) & "个"
方法大概是这样,要处理比如"//"的话可以在读取文件时处理掉的,用Split+For处理比较简单
其实处理文本VB算是非常好用的了,起码在类型和编码上不用去考虑太多,如果是VC处理起来就
麻烦多了。VB的数组概念也是很方便的,好好利用这些函数其实很容易处理的。
你最好学好这些常用函数,对文本的处理很有用的:
InStr
Mid
Left
Right
Len
Split
LTrim
RTrim
Trim
UCase
LCase
StrConv
String
Format
我只能口头给你们结分了,不过估计你们也不稀罕,呵呵
各位都是100分,不过SupermanKing,正如你的名字样,再100分前面再加个super.