uma forma de fazer é copiar a função Split, muito comum no mundo do desenvolvimento web
neste exemplo, eu uso um TstringList para receber a linha e troco o caractere "|" por novas linhas, não é o modo mais eficiênte, mas é funcional:
usei no exemplo o componente Listview da (paleta win32)
var
input : TStringList;
Split_Temp : TStringList;
i:integer;
Column_count:Integer;
begin
try
Column_count := 0;
input := TStringList.Create;
// inicilizar o arquivo
input.Add('Uno | 2000 | Fiat');
input.Add('S10 | 2016 | Chevrolet');
ListView1.ViewStyle := vsReport; // tipo de visualização da list
Split_Temp:=TStringList.Create;
for i := 0 to input.Count -1 do //ler linha por linha
begin
//a ideia é simples:
//trocar o caractere "|" de cada linha por uma nova linha, não é a forma mais eficiênte, mas é funcional!
Split_Temp.Text := StringReplace(input[i],'|',#13#10,[rfReplaceAll]);
if Split_Temp.Count > 0 then
with ListView1.Items.Add do //adiciona um novo item no listview
begin
Caption := Split_Temp[0];
Split_Temp.Delete(0); // para não aparecer 2x na lista
SubItems.AddStrings(Split_Temp); //adicionando todas as outras características no item do listview
If Split_Temp.Count > Column_count then
Column_count := Split_Temp.Count;
end;
end;
//adicionar as colunas na listview
for i:= 0 to Column_count do
with ListView1.Columns.Add do
Caption := 'Coluna: '+IntToStr(i);
finally
FreeAndNil(input);
FreeAndNil(Split_Temp);
end;
end;