0

告诉我如何 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 
-------------------------------------------------------------------------- 
4

1 回答 1

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;

您也可以尝试使用两个高级字符串列表对字符串进行内部解析,例如将字符串拆分为基于分隔符的字符串数组

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;
于 2013-03-18T10:37:20.887 回答