DELPHI 截取字符串

Liyp92 2014-08-26 03:36:03
我Excel中有这样两行

我要取到的值分别用不同的变量存储。
比如
第一行: A='FA15' 第二行:A1='GAMERL'
B='644841' B1=''
C='191199 ' C1=''
D='EAG / CN ' D1='BLACK'
E='K' E1=''
F1=''
G1='2279071'
H1='3031673'
I1='PFX'
就是空白的地方也要给空值
各位大神能实现么?

下面是Excel的值。
" : FA15
: 644841
: 191199
: EAG / CN
: K"

" GAMERL


BLACK


2279071
3031673
PFX"
...全文
387 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ttbook001 2014-08-28
  • 打赏
  • 举报
回复
引用 13 楼 u012072926 的回复:
function TForm2.split(s,sub:string):TStringList;
begin
Result:=TStringList.Create;
while Pos(sub,s)>0 do
begin
Result.Add(Copy(s,1,Pos(sub,s)-1));
Delete(s,1,Pos(sub,s)+Length(sub)-1);
end;
Result.Add(s);
//SHowmessage(IntToStr(Result.Count));
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  Showmessage(split(':  FA15   :  644841    :  191199     :  EAG / CN    :  K',':  ').Text);
  //Showmessage(split('  :  FA15  :  644841   :  191199         EAG / CN   :   :   K','  :  ').Text);
end;
你存': FA15 : 644841 : 191199 : EAG / CN : K'到单元格,与存‘ : FA15 : 644841 : 191199 : EAG / CN : K’ 得到的text是不同的,后者多了换行符或者回车换行符之类的。 如果是按照后者存的,你只需要按照换行符等特殊字符查找替换或者用上面方法。 如果是按照前者存的,前一单元格你按照你的':'分割,后面有空格的那一单元格,因为只能查到空格个数,你如果无法明确空格是独立的还是包括在前后字符中的,最好源头控制,加入特殊分隔符。
Liyp92 2014-08-27
  • 打赏
  • 举报
回复
function TForm2.split(s,sub:string):TStringList;
begin
Result:=TStringList.Create;
while Pos(sub,s)>0 do
begin
Result.Add(Copy(s,1,Pos(sub,s)-1));
Delete(s,1,Pos(sub,s)+Length(sub)-1);
end;
Result.Add(s);
//SHowmessage(IntToStr(Result.Count));
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  Showmessage(split(':  FA15   :  644841    :  191199     :  EAG / CN    :  K',':  ').Text);
  //Showmessage(split('  :  FA15  :  644841   :  191199         EAG / CN   :   :   K','  :  ').Text);
end;
Liyp92 2014-08-27
  • 打赏
  • 举报
回复
引用 11 楼 ttbook001 的回复:
[quote=引用 10 楼 u012072926 的回复:] [quote=引用 7 楼 ttbook001 的回复:] [quote=引用 4 楼 u012072926 的回复:] [quote=引用 1 楼 ttbook001 的回复:] 先循环 pExcel.ActiveSheet.Cells[RowCount,ColumnCount].Text; 得到全部两行的值,里面包含了空格之类的。 在自己写函数解析添加到stringlist或string 数组中应该可以。
我知道取Excel的值,只是不怎么这样要怎么截取。 本人比较菜[/quote] 如果知道取值的话,应该也知道是以那个为分隔符。 假如得到的text是#10(#$A)分隔。可以替换这个#10为特殊符,直接使用字符遍历该Text. 取个例子: [/quote] 这个Excel是PDF转过来到。可能就是些:和空格吧[/quote] 你用上面方法试了没? 上面的excel是可以读出每个值的,包括空格。而且上面写的也是比较通用的,如果 有不同,你也可以改造下。 [/quote]你写得好复杂,我没看懂。呵呵 我写了一段,贴在下面,EXCEL内容比较规范还好,有时不规范就郁闷死了
ttbook001 2014-08-27
  • 打赏
  • 举报
回复
引用 10 楼 u012072926 的回复:
[quote=引用 7 楼 ttbook001 的回复:]
[quote=引用 4 楼 u012072926 的回复:]
[quote=引用 1 楼 ttbook001 的回复:]
先循环 pExcel.ActiveSheet.Cells[RowCount,ColumnCount].Text; 得到全部两行的值,里面包含了空格之类的。 在自己写函数解析添加到stringlist或string 数组中应该可以。

我知道取Excel的值,只是不怎么这样要怎么截取。
本人比较菜[/quote]

如果知道取值的话,应该也知道是以那个为分隔符。 假如得到的text是#10(#$A)分隔。可以替换这个#10为特殊符,直接使用字符遍历该Text. 取个例子:
[/quote]
这个Excel是PDF转过来到。可能就是些:和空格吧[/quote]
你用上面方法试了没? 上面的excel是可以读出每个值的,包括空格。而且上面写的也是比较通用的,如果 有不同,你也可以改造下。
Liyp92 2014-08-27
  • 打赏
  • 举报
回复
引用 7 楼 ttbook001 的回复:
[quote=引用 4 楼 u012072926 的回复:] [quote=引用 1 楼 ttbook001 的回复:] 先循环 pExcel.ActiveSheet.Cells[RowCount,ColumnCount].Text; 得到全部两行的值,里面包含了空格之类的。 在自己写函数解析添加到stringlist或string 数组中应该可以。
我知道取Excel的值,只是不怎么这样要怎么截取。 本人比较菜[/quote] 如果知道取值的话,应该也知道是以那个为分隔符。 假如得到的text是#10(#$A)分隔。可以替换这个#10为特殊符,直接使用字符遍历该Text. 取个例子: [/quote] 这个Excel是PDF转过来到。可能就是些:和空格吧
Liyp92 2014-08-27
  • 打赏
  • 举报
回复
引用 6 楼 seleron 的回复:
截取字符串 拼成所需的sql
我就是不知道要怎么截取成那样的
Liyp92 2014-08-27
  • 打赏
  • 举报
回复
引用 3 楼 ksrsoft 的回复:
从excel读取出来可能就是多行 用TStringList先存起来,看看是不是多行
没有,读出来只有一行
ttbook001 2014-08-26
  • 打赏
  • 举报
回复
引用 4 楼 u012072926 的回复:
[quote=引用 1 楼 ttbook001 的回复:] 先循环 pExcel.ActiveSheet.Cells[RowCount,ColumnCount].Text; 得到全部两行的值,里面包含了空格之类的。 在自己写函数解析添加到stringlist或string 数组中应该可以。
我知道取Excel的值,只是不怎么这样要怎么截取。 本人比较菜[/quote] 如果知道取值的话,应该也知道是以那个为分隔符。 假如得到的text是#10(#$A)分隔。可以替换这个#10为特殊符,直接使用字符遍历该Text. 取个例子: for I := 1 to 2 do //RowCount; begin tempStr := ''; tmpCellVal := ''; for J := 1 to 1 do //ColumnCount begin tmpCellVal := pExcel.ActiveSheet.Cells[I,J].Text; StringReplace(tmpCellVal, '#$A', '', [rfReplaceAll]); SplitStr(tmpCellVal, '#10'); ShowMessage(tmpCellVal); end; function ReplaceStr(const AStr: string; AReplaceStr: string): string ; function MatchChar(const Ch: Char): Boolean; begin Result := (ch in [#10]); end; var tmpStr: string; pReplace: PChar; const cReplaceStr = '@'; begin tmpStr := AStr; pReplace := PChar(tmpStr); if pReplace^ <> AReplaceStr then pReplace := CharNext(pReplace); while pReplace^ <> #0 do begin if not MatchChar(pReplace^) then pReplace := CharNext(pReplace) else pReplace^ := cReplaceStr; end; end; function SplitStr(const AStr: string; ADelimter: string): string; function MatchDelimiter(const Ch: Char): Boolean; begin Result := ch in ['@']; end; var tmpStr: string; pFlag, p: PChar; begin //格式化字符; Result := ''; tmpStr := AStr; ReplaceStr(tmpStr, '#10'); //替换为@,免得后面要特殊处理#10; p := PChar(tmpStr); if p^ in [#1..#31] then p := CharNext(p); while p^ <> #0 do begin pFlag := p; //记住有标识的起始位置; begin while (p^ >= #32) and (not MatchDelimiter(p^)) do begin p := CharNext(p); end; SetString(tmpStr, pflag, p - pflag); ShowMessage(tmpStr); //获取的值,show出来; end; while P^ in [#1..#32] do begin P := CharNext(P); end; if MatchDelimiter(P^) then begin Result := Result + p^; repeat P := CharNext(P); until not (P^ in [#1..#31]); //字符串以 #32 空格开头 的 不能跳过 end; end; end;
程晨c 2014-08-26
  • 打赏
  • 举报
回复
截取字符串 拼成所需的sql
Liyp92 2014-08-26
  • 打赏
  • 举报
回复
引用 2 楼 lyhoo163 的回复:
你没有讲清目的,字符串保存在数据库,还是其它用途。 1、使用字符类型,都可以保存的。 2、也可能分类保存。
我要将取到到值按不同字段写入数据库。
Liyp92 2014-08-26
  • 打赏
  • 举报
回复
引用 1 楼 ttbook001 的回复:
先循环 pExcel.ActiveSheet.Cells[RowCount,ColumnCount].Text; 得到全部两行的值,里面包含了空格之类的。 在自己写函数解析添加到stringlist或string 数组中应该可以。
我知道取Excel的值,只是不怎么这样要怎么截取。 本人比较菜
缘中人 2014-08-26
  • 打赏
  • 举报
回复
从excel读取出来可能就是多行 用TStringList先存起来,看看是不是多行
lyhoo163 2014-08-26
  • 打赏
  • 举报
回复
你没有讲清目的,字符串保存在数据库,还是其它用途。 1、使用字符类型,都可以保存的。 2、也可能分类保存。
ttbook001 2014-08-26
  • 打赏
  • 举报
回复
先循环 pExcel.ActiveSheet.Cells[RowCount,ColumnCount].Text; 得到全部两行的值,里面包含了空格之类的。 在自己写函数解析添加到stringlist或string 数组中应该可以。

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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