请教一段文本字符串处理的写法

lili_021 2015-01-19 03:33:14

有一个 abc.txt 的文本文件,内容大致如下:

GRID 3000 -745.365 0. 510.569 3001
GRID 3101 -699.801-387.044519.1856 3001
GRID 3102 -699.993383.1271519.1432 3001
GRID 3401 15.40002-699.264646.7366
GRID 3402 85.64902 -699.32 654.12
GRID 3000000 -686.081.848209 522.163
GRID 3000001 -690.4111.672196521.2425

贴进记事本里可以看清楚,格式是每8位是一个字符串。
除了第一列是在后面补空格之外,其他列都是不够8位的话在前面补空格。

现在想查找含有“3101” 和“3102” 的两列,把这两列的内容每8位一截取,分别放进不同的EDIT里

结果的形式希望是:
EDIT1里写GRID
EDIT2里写3101
EDIT3里可能是空格,没有用,不要也行
EDIT4里写-699.801
EDIT5里写-387.044
EDIT6里写519.1856
EDIT7里写3001
然后
EDIT11里写GRID
EDIT12里写3102
EDIT13里可能是空格,没有用,不要也行
EDIT14里写-699.993
EDIT15里写383.1271
EDIT16里写519.1432
EDIT17里写3001


(其实最重要的是想要含有3101和3102这两个字符串那两行后边的三个数,想把这都挨到了一起的坐标数据分离出来)
由于基础太差,只好在这里请教下大家了,谢谢!!

...全文
148 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lili_021 2015-01-20
  • 打赏
  • 举报
回复
我大概改成这样: procedure TForm1.Button1Click(Sender: TObject); var sl:TStringList; begin sl:=TstringList.Create; sl.LoadFromFile(C:\test\abc.txt); memo1.lines.clear; momo1.lines.addstrings(sl); memo2.lines.clear; memo2.lines.add(memo1.lines.strings[1]); edit1.text:=copy(memo2.lines.strings[0],25,8); edit1.text:=copy(memo2.lines.strings[0],33,8); edit1.text:=copy(memo2.lines.strings[0],41,8); end; 可以把3个数分离出来,但只是针对特定的第几行, 如果我希望处理的是有3101和3102的那两行,该咋办啊 用POS('3101',memo1.text)得到的也是绝对的位置吧,不是行的值吧,而且有时莫名其妙的不知道定位到第几行去了 另一个想法是用if >0来实现,那如果逐行读取的话,后面可能还有 3101,但我不想读了怎么办,用break吗
lili_021 2015-01-20
  • 打赏
  • 举报
回复
我用for do和if 那个方法解决了,谢谢二位啦
lhy 2015-01-19
  • 打赏
  • 举报
回复
那你就八个字节截出来,然后两头去掉空格就可以了。
doloopcn 2015-01-19
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject); var sl:TStringList; i,j:Integer; tmps:String; strulen:Integer; //你定义的每列的固定长度 //添加空格 function insspace(str:string;maxspace:Integer):string; var k:Integer; begin str:=trim(str); for k:=1 to maxspace-Length(str) do str:=' '+str; result:=str; end; begin strulen:=8; sl:=TStringList.Create; sl.LoadFromFile('d:\My Documents\testtt.txt'); memo2.Lines.Clear; memo2.Lines.AddStrings(sl); memo1.Lines.Clear; for i:=0 to sl.Count-1 do begin tmps:=''; for j:=1 to Length(sl[i]) do if ((j>1) and ((j Mod strulen)=0)) then begin if tmps='' then tmps:=copy(sl[i],j-strulen+1,strulen) else tmps:=tmps+','+copy(sl[i],j-strulen+1,strulen); end; memo1.Lines.Add(tmps); end; sl.Free; memo3.Lines.Clear; memo3.Lines.CommaText :=memo1.Lines.Text; //for i:=0 to memo1.Lines.Count -1 do // memo3.Lines.AddStrings(memo1.Lines[i].); for i:=0 to memo3.Lines.Count-1 do memo3.Lines[i]:=insspace(memo3.Lines[i],strulen); end;

16,748

社区成员

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

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