从文本文件中读指定的字符串

时间:2023-02-11 09:30:38
文本文件2M左右,部分内容如下
4002133202233736}{W0009H070515224102033302234031}{W0009H070515224202033402334337}{W0009H070515224301933802134342}{W0009H070515224402034002134536}{W0009H07051522450213370233433e}{W0009H070515224602233802334341}{W0009H070515224702233902334343}{W0009H070515224802133902334545}{W0009H0705152249022336{W0009H070515225002233402434036}{W0009H07051522510223320243373b}
大括号内的内容是完整数据,如果不再大括号内就舍弃,怎么读取大括号里的内容到指定变量?我用READLN只能读一行,无法判断是否在大括号内。谢谢,急用

11 个解决方案

#1


readln再读了...

#2


可以先用readln读,然后用pos来截取处理。

#3


没做严格测试,供参考:

uses StrUtils;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  List: TStringList;
  m, n, x: Integer;
  s: string;
begin
  List := TStringList.Create;
  List.LoadFromFile('d:\1.txt');
  Memo1.Clear;
  m := 1;
  n := 1;
  while (m <> 0) and (n <> 0) do
  begin
    m := PosEx('{', List.Text, m);
    if m = 0 then Break;
    n := PosEx('}', List.Text, m);
    if n <> 0 then
    begin
      s := Copy(List.Text, m + 1, n - m - 1);
      x := Pos('{', s);
      if x <> 0 then    // 不合法,去掉
      begin
        m := m + x;
        continue;
      end;
      x := Pos(#13, s); // 如果中间有换行,删除换行符
      if x <> 0 then
        Delete(s, x, 2);
      m := n + 1;
      Memo1.Lines.Add(s); // 加到mode1,你可以保存到其它地方
    end;
  end;
  List.Free;
end;

#4


m := PosEx('{', List.Text, m);
其中Posex是什么函数,谢谢!

#5


PosEx是Pos的一个扩展函数,在StrUtils单元

#6


上面代码有点乱,可以重组一下:

procedure TForm1.Button1Click(Sender: TObject);
var
  List: TStrings;
  m, n, x: Integer;
  s: string;
begin
  List := TStringList.Create;
  try
    List.LoadFromFile('d:\1.txt');
    Memo1.Clear;
    m := 1;
    while True do
    begin
      m := PosEx('{', List.Text, m);
      n := PosEx('}', List.Text, m);
      if (m = 0) or (n = 0) then Break;
      s := Copy(List.Text, m + 1, n - m - 1);
      x := Pos('{', s);
      if x = 0 then
      begin
        x := Pos(#13, s); // 如果中间有换行,删除换行符
        if x <> 0 then
          Delete(s, x, 2);
        Memo1.Lines.Add(s); // 加到mode1,你可以保存到其它地方
        m := n + 1;
      end else              // 不合法,去掉
        Inc(m, x);
    end;
  finally
    List.Free;
  end;
end;

#7


我怎么给你加不上分

#8


我才知道有这么一个PosEx。
很多函数都要自己去看源代码才发现有。。。

#9


给分点“管理”

#10


如果我要把里面的数据用COPY函数分解出来,放到已经存在SQL数据库表里,用哪个控件比较合适?

#11


也推荐下正则表达式

#1


readln再读了...

#2


可以先用readln读,然后用pos来截取处理。

#3


没做严格测试,供参考:

uses StrUtils;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  List: TStringList;
  m, n, x: Integer;
  s: string;
begin
  List := TStringList.Create;
  List.LoadFromFile('d:\1.txt');
  Memo1.Clear;
  m := 1;
  n := 1;
  while (m <> 0) and (n <> 0) do
  begin
    m := PosEx('{', List.Text, m);
    if m = 0 then Break;
    n := PosEx('}', List.Text, m);
    if n <> 0 then
    begin
      s := Copy(List.Text, m + 1, n - m - 1);
      x := Pos('{', s);
      if x <> 0 then    // 不合法,去掉
      begin
        m := m + x;
        continue;
      end;
      x := Pos(#13, s); // 如果中间有换行,删除换行符
      if x <> 0 then
        Delete(s, x, 2);
      m := n + 1;
      Memo1.Lines.Add(s); // 加到mode1,你可以保存到其它地方
    end;
  end;
  List.Free;
end;

#4


m := PosEx('{', List.Text, m);
其中Posex是什么函数,谢谢!

#5


PosEx是Pos的一个扩展函数,在StrUtils单元

#6


上面代码有点乱,可以重组一下:

procedure TForm1.Button1Click(Sender: TObject);
var
  List: TStrings;
  m, n, x: Integer;
  s: string;
begin
  List := TStringList.Create;
  try
    List.LoadFromFile('d:\1.txt');
    Memo1.Clear;
    m := 1;
    while True do
    begin
      m := PosEx('{', List.Text, m);
      n := PosEx('}', List.Text, m);
      if (m = 0) or (n = 0) then Break;
      s := Copy(List.Text, m + 1, n - m - 1);
      x := Pos('{', s);
      if x = 0 then
      begin
        x := Pos(#13, s); // 如果中间有换行,删除换行符
        if x <> 0 then
          Delete(s, x, 2);
        Memo1.Lines.Add(s); // 加到mode1,你可以保存到其它地方
        m := n + 1;
      end else              // 不合法,去掉
        Inc(m, x);
    end;
  finally
    List.Free;
  end;
end;

#7


我怎么给你加不上分

#8


我才知道有这么一个PosEx。
很多函数都要自己去看源代码才发现有。。。

#9


给分点“管理”

#10


如果我要把里面的数据用COPY函数分解出来,放到已经存在SQL数据库表里,用哪个控件比较合适?

#11


也推荐下正则表达式