告诉我如何DIUnicode读取用户定义的行,例如以行8开头? 例如,我从第8行开始直到11 这一笔付款..等等
===========================================
|Period 01.01.2012 31.12.2012
Saldo 01.01.2012
----------------------------------------------------------------
| Date | Correspondet: Bank/account/Tax Name |
| Payment | Remark |
---------------------------------------------------------------- |
|04.01.2012 | Bank:00883 account:200004000000005936111 tax:000000000|
| |paynet |
| |00644blbalbalbalbalbalbalbalN-4774 |
| | 24.03.2010 |
----------------------------------------------------------------
|06.01.2012 |BANK:00883 account:200004000600005000111 tax:000000000 |
| |paynet |
| |00644blablbalbalbalbalbalblab-4774 |
| | 24.03.2010
--------------------------------------------------------------------------
答案 0 :(得分:0)
对于给定的样本,最简单的方法是使用stirnglizst并迭代每一行但最初的7行。
我也不知道为什么你讲了diUnicode
图书馆。但我假设你的文件是用UTF8编码的。如果它实际上使用了另一种Unicode或非Unicode,那么相应地更改代码。
var sl: TStrings; s: String; i: integer;
begin
sl := TStringList.Create;
try
sl.LoadFromFile('c:\Table.txt', TEncoding.UTF8);
for i := 0 to 7 do sl.Delete(0);
for s in sl do begin
// do some work with s
ShowMessage(Copy(s,18, Length(s)));
end;
finally
sl.Free;
end;
end;
您也可以尝试使用两个高级字符串列表对字符串进行内部解析,例如Split a string into an array of strings based on a delimiter
var slF, slR: IJclStringList; l, s: string;
slF := TJclStringList.Create; slF.LoadFromFile('table.txt');
slR := TJclStringList.Create;
slF.Delete(0).Delete(0).Delete(0).Delete(0).Delete(0).Delete(0).Delete(0); // delete top 7 lines
for l in slF do begin
if StartsStr('-----', l) then continue; // skip separator
slR.Split(l, '|', true).Trim;
for s in slR do {nothing or something} Application.Title := s ;
ShowMessage('Date or void: '+ slR[0]);
ShowMessage('Transfer details: '+ slR[1]);
end;
slF := nil; slR := nil;