帮bukelong提出问题!关于在文本中取出字符串的问题,希望大家出手相助!! (200分)

  • 主题发起人 thinkjsp
  • 开始时间
T

thinkjsp

Unregistered / Unconfirmed
GUEST, unregistred user!
我要在一个test.txt中要找出三个字符串,分别赋给str1,str2,str3,然后存入数据库,怎么办,具体像这样
test.txt的内容:
<1111>string1<1122><2233>string2<3344><4455>string3<5566>
我要从中取出string1,string2,string3存入数据库,就这样。
我可以确保string1,string2,string3的内容不会与分割字符串相等!!
但我的文件多,所以这个动作的效率就需要好一些才行,希望大侠们帮我解决一下!
能用JAVA或VB来解决最好,但其它语言的也行!!谢谢!
 
W

wr960204

Unregistered / Unconfirmed
GUEST, unregistred user!
字符串解析的速度肯定比你写数据库的速度快。不是瓶颈
 
W

wr960204

Unregistered / Unconfirmed
GUEST, unregistred user!
而且你的规则没说清楚。如果String1的内容是“<1122>”你还能解析对吗?
 
J

jwd01

Unregistered / Unconfirmed
GUEST, unregistred user!
9494,字符串分隔符不能用常规字符,应该用特殊字符,这样才不会混乱
 
T

thinkjsp

Unregistered / Unconfirmed
GUEST, unregistred user!
>>wr960204
我可以确保要的内容中不会有分割字符串
 
J

jwd01

Unregistered / Unconfirmed
GUEST, unregistred user!
//参数:SourceText 要查找的文本,
StringID 指定的字符串标志,如<>中的内容,不包括<>。
如:StringID='2233',则函数返回String2.
function GetStringFromText(SourceText,StringID:String):String;
var
MyID:String;
i,x1,x2:Integer;
Finded:Boolean;
begin
Finded:=False;
x1:=0;
x2:=0;
MyID:='';
for i:=1 to Length(SourceText)do
begin
if SourceText='<' then
begin
x1:=i;
if Finded then
Break;
end;
if x1>0 then
MyID:=MyID+SourceText;
if SourceText='>' then
begin
x2:=i;
if MyID=StringID then
Finded:=True
else
begin
x1:=0;
MyID:='';
end;
end;
end;
Result:=Copy(SourceText,x2+1,x1-x2-1);
end;
 
I

ing

Unregistered / Unconfirmed
GUEST, unregistred user!
你那字符有多少"種分隔符"??
 
I

ing

Unregistered / Unconfirmed
GUEST, unregistred user!
function FindStr(BegSprStr,EdSpStr:String;var Source:String):String;
var
BegStr1Len,EdSpStr2Len,BegStr1Index,EdSpStr2index:integer;
Temp:String;
begin
Temp:=Source;
BegStr1Index:=Pos(BegSprStr,Temp);
BegStr1Len:=Length(BegSprStr);
delete(Temp,BegStr1Index,BegStr1Index+BegStr1Len-1);
EdSpStr2index:=Pos(EdSpStr,Temp);
EdSpStr2Len:=Length(EdSpStr);
Result:=Copy(Temp,1,EdSpStr2index-1);
Delete(Temp,1,EdSpStr2index+EdSpStr2Len-1);
Source:=temp;
end
該函數的功能就是取兩個相隔符之間的字符.
按照你上面的要求
var Source:string
Source:=<1111>string1<1122><2233>string2<3344><4455>string3<5566>;
string1:=FindStr('<1111>','<1122>',Source);
String2:=FindStr('<2233>','<3344>',Source);
String3:=FindStr('<4455>','<5566>',Source);

 
S

SS2000

Unregistered / Unconfirmed
GUEST, unregistred user!
html文件的解析?
 
S

SS2000

Unregistered / Unconfirmed
GUEST, unregistred user!
ing,你可能理解错了它的意思,他不关心<>中间是什么,他关心的是<>string1<>中的string1。
可能<>中可以是任意字符<~!@#>string1<%^&amp;*>找出string1!
 
S

SS2000

Unregistered / Unconfirmed
GUEST, unregistred user!
其实仔细分析,就会发现,他要找的是>和<之间的字符,这样就很好办了。
首先找到>的位置,在找到<的位置,取两个位置之间的字符,再找下一个>>的位置,
在找下一个<的位置,取两个位置之间的字符,如此直到找完为止
 
T

thinkjsp

Unregistered / Unconfirmed
GUEST, unregistred user!
>>SS2000
对了,我就是要string1,分割的字符串是HTML语句,我就是要在网页中取出相关的信息!希望您能帮下忙!!
>>ing
谢谢,您的思路对我很有启发,如果该函数可以的话,我会再去用DELPHI完整它的!!
其实,该问题可以用任何的语言解决,但要是有Java或在JSP,asp中解决对我来说会更好些,因为我这在用这方面的语言!!再次谢谢大家的关注,我相信在大家的帮助下肯定能完成这个功能的!!
 
N

Netsoft

Unregistered / Unconfirmed
GUEST, unregistred user!
如果文件的每行都是那样的话,
加一个同名的 XXX.sch文件,
就成了一个文本数据,
数据表不会操作吗?
呵呵~~~~~~~
 
T

thinkjsp

Unregistered / Unconfirmed
GUEST, unregistred user!
>>Netsoft
当然不是了,我是要在一个网页的源码中提限需要的信息,所以我只能确定每个网页中的分割字符串,而不能确定每行,谢谢!!
 
S

SS2000

Unregistered / Unconfirmed
GUEST, unregistred user!
我不是已经告诉你思路了吗,难道要我写成代码?
 
T

thinkjsp

Unregistered / Unconfirmed
GUEST, unregistred user!
>>SS2000
思路已经知道了,就是代码写不出来啊,希望老兄能帮一把,因为我是要从成批的网页中提取信息的,具体的没像这个例子这么简单,要考虑很多东西的!!
如果,您愿意的话,可否留个QQ,MSN...的好吗?
分数不够可另加!!谢谢!!
 
S

SS2000

Unregistered / Unconfirmed
GUEST, unregistred user!
>>要考虑很多东西的!!
我也不知道你要考虑什么,要是让我在往下,就不是帮你解决问题了,是帮你干活了,解决问题我们大富翁都是无偿的,顶多要点分,帮你干活就不能无偿了,没法帮了
 
S

SS2000

Unregistered / Unconfirmed
GUEST, unregistred user!
还有一个很妙的思路给你,就是把<~!@#>替换成#$D#$A,然后。。。就很easy了,很妙吧,昨天我都没有舍得说,呵呵。。。
 
L

lich

Unregistered / Unconfirmed
GUEST, unregistred user!
Java和VB都支持正则表达式,
用正则表达式很容易搞定的(就像SS2000说的那样)
 
T

thinkjsp

Unregistered / Unconfirmed
GUEST, unregistred user!
>>SS2000的帮你干活就不能无偿了!!谢谢你的友情提示!!
>>lich:能不能给个算法,干脆我把样本贴出来吧!
我要从中取出“JAVA新技术-JSP”和“<br>   在 Sun ......<br>必要。“这两个字符串!
望大家能过目,并给个解决的思路!样本如下贴!!!
 

Similar threads

顶部