2013-08-26 3 views
2

Мы используем приведенный ниже код, чтобы удалить пустые строки из текстового файла, но он не работает.Inno Setup: удалите пустые строки из тестового файла

function UpdatePatchLogFileEntries : Boolean; 
var 
a_strTextfile : TArrayOfString; 
iLineCounter : Integer; 
    ConfFile : String; 

begin 

ConfFile := ExpandConstant('{sd}\patch.log'); 
    LoadStringsFromFile(ConfFile, a_strTextfile); 

    for iLineCounter := 0 to GetArrayLength(a_strTextfile)-1 do 
    begin 
     if (Pos('', a_strTextfile[iLineCounter]) > 0) then 
      Delete(a_strTextfile[iLineCounter],1,1); 
    end; 
    SaveStringsToFile(ConfFile, a_strTextfile, False);    
end; 

Пожалуйста, помогите мне. Спасибо заранее.

ответ

2

Поскольку повторная индексация массива была бы неэффективной и иметь два массива для копирования непустых строк файла, было бы излишне сложно, я бы предложил вам использовать класс TStringList. В нем есть все, что вам нужно, завернутые внутрь. В коде я бы написал такую ​​функцию:

[Code] 
procedure DeleteEmptyLines(const FileName: string); 
var 
    I: Integer; 
    Lines: TStringList; 
begin 
    // create an instance of a string list 
    Lines := TStringList.Create; 
    try 
    // load a file specified by the input parameter 
    Lines.LoadFromFile(FileName); 
    // iterate line by line from bottom to top (because of reindexing) 
    for I := Lines.Count - 1 downto 0 do 
    begin 
     // check if the currently iterated line is empty (after trimming 
     // the text) and if so, delete it 
     if Trim(Lines[I]) = '' then 
     Lines.Delete(I); 
    end; 
    // save the cleaned-up string list back to the file 
    Lines.SaveToFile(FileName); 
    finally 
    // free the string list object instance 
    Lines.Free; 
    end; 
end; 
+0

TLama @ Спасибо за ответ, он работает для меня. – user1752602

+0

Добро пожаловать! – TLama