Objeto TStringManagerOla a todosNas proximas semanas estarei postando no dicas4lazarus alguns objetos/classes desenvolvidos por mim.Sao objetos simples, que eu escrevi para automatizar algumas tarefas realizadas diariamente.No exemplo de hoje, veremos o TStringManager.DescricaoO TStringManager e apenas um TStringlist com algumas funcoes especiais que eventualmente utilizamos para facilitar certas tarefas como adicionar conteudo a um arquivo ja existente, contar as palavras, e salvar no formato unix.O metodo SaveToFileEx faz a mesma coisa que o SaveToFile. Porem, em alguns casos, o SaveFile do TStringList nao salva no disco e nao retorna erro, como no caso em que nao tem permissao de escrita no disco. Usando o SaveToFileEx, se nao tiver permissao, retornara um erro.UtilizacaoPara usar o TStringManager, basta adicionar ao seu form e utiliza-lo como se fosse um Itens de um TListBoxMetodosGetWordList(str: String) Retorna um TStringList com a lista de palavras passada no parametro str. Use esse metodo em conjunto com a propriedade WordList.SavetoFileEx(strfilename: String)Identico ao Savetofile, porem retorna erro em caso de falhas.AppendToFile(strfilename: String)Salva o texto em um arquivo ja existente, adicionando no final do arquivo informado em strfilename. ConvertToUnix(SourceFile, TargetFile: String)Funcao para converter um arquivo do formato windows para o linux.PropriedadesWordListContem a lista de palavras criada pelo metodo GetWordList.ItemsManipulador do TStringList.Exemplo de uso:varStr1:TStringManager;npalavras:Integer;nlinhas:Integer;beginStr1:TStringManager.Create(self);Str1.Items.Add('Exemplo simples de como utilizar o TStringManager');Str1.Items.Add('Veremos como salvar o texto em um arquivo');Str1.Items.Add('E tambem como adicionar o texto em um arquivo ja existente'); Str1.Items.Add('Quantas palavras tem o texto? chame GetWordList(seu texto) '); npalavras:=0;for nlinhas:=0 to Str1.Items.count-1 doBegin GetWordList(Str1.Items[nlinhas]); npalavras:=npalavras+ WordList.count;end;ShowMessage('O texto contem '+inttostr(npalavras)+' palavras');//Salvando em um novo arquivo Str1.SavetoFileEx('exemplo.txt'); Str1.Items.Add('Texto adicionado em arquivo ja existente');//Salvando em um arquivo ja existente (append)//No exemplo, ira adicionar o mesmo texto 3 vezes no arquivo exemplo.txtStr1.AppendtoFile('exemplo.txt'); Str1.AppendtoFile('exemplo.txt');Str1.AppendtoFile('exemplo.txt'); Str1.free;end;Segue abaixo o codigo fonte. Espero que seja util.Ate a proxima.Codigo fontetype TStringManager = class(TComponent) private Fwordlist: TStrings; FItems: TStrings; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure GetWordList(str: String); procedure SavetoFileEx(strfilename: String); procedure AppendToFile(strfilename: String); procedure setItems(Value: TStrings); procedure ConvertToUnix(SourceFile, TargetFile: String); protected published property WordList: TStrings Read FWordlist; property Items: TStrings Read FItems Write setItems; end;constructor TStringManager.Create(AOwner: TComponent);begin inherited; FWordList := TStringList.Create; FItems := TStringList.Create;end;destructor TStringManager.Destroy;begin inherited;end;procedure TStringManager.getwordlist(str: string);var Count: integer; i: integer; len: integer; s1: string;begin s1 := ''; FWordList.Clear; len := length(str); Count := 0; i := 1; while i <= len do begin while ((i <= len) and ((str[i] = #32) or (str[i] = #9) or (Str[i] = ';'))) do Inc(i); if i <= len then Inc(Count); while ((i <= len) and ((str[i] <> #32) and (str[i] <> #9) and (Str[i] <> ';'))) do begin s1 := s1 + str[i]; Inc(i); end; if s1 <> '' then FWordList.Add(s1); s1 := ''; end;end;procedure TStringManager.ConvertToUnix(SourceFile, TargetFile: string);var SAIDA: TFileStream; Buffer: array[0..1] of char; Entrada: TFileStream; Lidos: integer;begin Entrada := TFileStream.Create(SourceFile, fmOpenRead); SAIDA := TFileStream.Create(TargetFile, fmCreate); repeat Lidos := Entrada.Read(Buffer, 1); if Buffer[0] = ''#13'' then Continue; SAIDA.Write(Buffer, Lidos); until Lidos = 0; Entrada.Free; SAIDA.Free;end;procedure TStringManager.AppendToFile(strfilename: String);var FTextFile: TextFile; x: integer;begin try AssignFile(FTextFile, strfilename); Append(FTextFile); for x := 0 to FItems.Count - 1 do writeln(FTextFile, FItems[x]); except Showmessage('Problemas ao escrever em '+strfilename); end; CloseFile(FTextFile);end;procedure TStringManager.SavetoFileEx(strfilename: string);var FTextFile: TextFile; x: integer;begin try AssignFile(FTextFile, strfilename); rewrite(FTextFile);