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;
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是什么函数,谢谢!
其中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;
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;
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是什么函数,谢谢!
其中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;
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
也推荐下正则表达式