Отбросьте TListView на форме и установите стиль для vsList. Создайте три столбца, которые вы хотите отобразить (щелкните правой кнопкой мыши ListView и выберите Редактор столбцов во всплывающем меню).
Добавьте следующий к FormShow() событие (или там, где вы хотите его):
procedure TForm1.FormShow(Sender: TObject);
var
SL: TStringList;
i: Integer;
begin
SL := TStringList.Create;
try
SL.LoadFromFile(YourFileNameHere);
i := 0;
while i < SL.Count do
begin
with ListView1.Items.Add do
begin
Caption := SL[i];
SubItems.Add(SL[i + 1]);
SubItems.Add(SL[i + 2]);
end;
Inc(i, 3);
end;
finally
SL.Free;
end;
end;
Обратите внимание, что это предполагает, что вы ищете что-то вроде этого:
0th member first=XXXXX second=YYYYY
1 first=ZZZZZ second=ZZZZZ
Если то, что вы ищете больше похож:
0th member XXXXX YYYYY
1 ZZZZZ ZZZZZ
Затем измените подпункты() вызывает к чему-то л икэ это:
SubItems.Add(Copy(SL[i + 1], Pos('=', SL[i + 1]) + 1, MaxInt);
SubItems.Add(Copy(SL[i + 2], Pos('=', SL[i + 2]) + 1, MaxInt);
Это извлекает только часть после равенства (=) знак из текстовых значений этих два малых столбца в.
Этого должно быть достаточно, чтобы вы начали, я думаю.
Обратите внимание, что в Delphi 2010 есть ошибка с TListView, когда ViewStyle установлен в vsReport, и вы не указали никаких элементов в среде IDE. Вы получаете сообщение об ошибке потока при попытке запустить приложение из-за неопределенных элементов. Вы можете обойти эту проблему, создав фиктивный элемент со значением нонсенс во время разработки, так и в вашем FormShow() событие добавьте следующее в первой исполняемой строке:
ListView1.Items.Clear;
Это становится мимо точки, что DFM является потоки в который, что и вызывает ошибку.
EDIT: прочитав комментарии от OP. Пропуск пустых строк:
// To skip entire group if starting line is blank
while i < SL.Count - 1 do
begin
if SL[i] <> '' then
begin
with ListView1.Items.Add do
// just like before
end
Inc(i, 3);
end;
Чтобы пропустить только пустые строки в подразделов:
while i < SL.Count - 1 do
begin
with ListView1.Items.Add do
begin
Caption := SL[i];
if SL[i + 1] <> '' then
SubItems.Add(SL[i + 1]);
if SL[i + 2] <> '' then
SubItems.Add(SL[i + 2];
end;
Inc(i, 3);
end;
спасибо за ответ сэр, мне нужно так же, как строка 1 подпись: XXXXXXXX подпозиция YYYYY000 линия 2 Подпись: XXXXXX11 подпозиция: YYYY11111 ; строка 3 ----- (и т. д.), и я попытался с помощью метода s r, и его работа прекрасна, если все данные построчно. в моем текстовом файле все данные не строки за строкой несколько раз я использую enter, тогда я получаю пустые поля в listview. есть ли вероятность, что я получу данные независимо от того, сколько пустых строк присутствует в файле? заранее спасибо . – noob
hmm, Я получил его на работу сэр, с пустыми линиями, в любом случае спасибо за идею. Мне любопытно узнать, могу ли я сделать это с помощью str.values? – noob
Для пробелов вы можете проверить сначала перед добавлением (см. Мое редактирование).Я не уверен, что вы подразумеваете под «с str.values»? –