2013-03-18 28 views
0

告訴我如何使用DIUnicode讀取用戶定義的行,例如從第8行開始? 例如我開始行8直到11 這一個付款..等德爾福告訴我如何DIUnicode讀取行用戶定義例如開始行8?

=========================================== 
|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

一行一行讀計數時他們。如果你的計數器大於7,開始你的工作? – 2013-03-18 06:39:50

+1

你試過了什麼?顯示一些代碼。我們無法分辨您是否是Delphi專家或全職新手。也許你不知道如何創建一個對象。我們不知道。哪個Delphi版本? – 2013-03-18 08:05:58

+0

我會使用'TStringList.LoadFromFile',然後讀行'7,8,9,... Pred(.Count)' 現代Delphi版本有SL能夠讀取unicode文件,對於不贊成使用的版本有第三方串列表unicode能力。 – 2013-03-18 08:37:51

回答

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; 

你也可以嘗試做字符串的內部分析,使用兩個先進stringlists,像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;