DELPHI STRING:从全名中提取姓氏
发布时间:2020-12-15 04:09:46 所属栏目:大数据 来源:网络整理
导读:我试图操纵一个字符串,只从中拉出某些数据.我需要在从数据库中提取的记录中执行此操作,该数据库为我提供了一个人的全名.我只需从字符串中提取姓氏并将其存储为变量.有没有办法可以做到这一点? 示例:SQL查询提取完整字段“Mary Ellen Jones”我需要从字符串
我试图操纵一个字符串,只从中拉出某些数据.我需要在从数据库中提取的记录中执行此操作,该数据库为我提供了一个人的全名.我只需从字符串中提取姓氏并将其存储为变量.有没有办法可以做到这一点?
示例:SQL查询提取完整字段“Mary Ellen Jones”我需要从字符串中仅提取Jones,以便将其存储在变量中以便进一步处理. 我想也许AnsiRightStr可以工作,但问题是需要给它一个设置整数从右边拉.也许在最终空间之后计算字符的方法允许我为此使用AnsiRightStr(string,int)?任何帮助都表示赞赏. 另外想一想:用分隔符替换空格是否说::然后将该数据解析为Stringlist,然后允许我拉出字符串列表的最后一个索引? 到目前为止已经提出了几个有效的选项.如果说名字是“John St. James,Jr.”之类的东西,他们都不会解决这种情况.这不可能吗? 解决方法
这是我的方法. >列出姓氏标记 var LastNameMarkers: TStringList = nil; SuffixFix: TStringList = nil; procedure InitLists; begin LastNameMarkers:= TStringList.Create; //LastNameMarkers.LoadFromFile('c:markers.txt'); LastNameMarkers.Add(' St.'); LastnameMarkers.Add(' Mc'); LastNameMarkers.Add(' '); //Marker of last resort. SuffixFix:= TStringList.Create; SuffixFix.Add(' Jr.'); SuffixFix.Add(' Sr.'); end; function GetLastName(FullName: string): string; var i: integer; start: integer; found: boolean; ReplaceWith: string; begin if LastNameMarkers = nil then InitLists; //Fix suffixes i:= 0; found:= false; while (i < SuffixFix.Count) and not found do begin start:= pos(lower(LastNameMarkers[i]),lower(Fullname)); found:= Start > 0; Inc(i); end; {while} if Found then begin Dec(i); ReplaceWith:= StringReplace(Suffix[i],' ','_',[]); FullName:= StringReplace(FullName,SuffixFix[i],ReplaceWith,[]); end; {if} //Look for lastnames i:= 0; found:= false; while (i < LastNameMarkers.Count) and not found do begin start:= pos(LastNameMarkers[i],Fullname); found:= Start > 0; Inc(i); end; {while} if found then Result:= RightStr(FullName,Length(FullName)- Start + 2) else Result:= ''; StringReplace(Result,[]); end; 我没有正确处理大写和小写,但我希望你能得到这个想法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |