Delphi告诉我如何DIUnicode读取用户定义的行,例如以行8开头?

时间:2013-03-18 05:58:56

标签: delphi delphi-xe3

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

1 个答案:

答案 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;