Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с индексными файлами

1.9K
05 марта 2008 года
Cool Xacker
148 / / 06.06.2006
Ребята, здрасти!

Подскажите пожалуйста как правильно работать с индексными файлами!!!

Создание такого файла, запись в него, чтение из него, добавление/изменение/удаление.

И с помощью каких компонентов с ними работать в Delphi???

За ранее пасибо
37K
05 марта 2008 года
vljak
2 / / 05.03.2008
1. хгм, мы не телепаты такие вопросы отвечать
2. я таких компонент не видел.
3. организованы по принципу массивов (одномерных) и к ним применимы все алгоритмы для массивов, т.к. сортировка, поиск, слияние-разделение и т.п.
1.9K
05 марта 2008 года
Cool Xacker
148 / / 06.06.2006
ну неужели никто не работал никогда с индексными файлами!!!

Хорошо, как использовать ListView с этими индексными файлами (или даже просто с файлами)??
1.9K
17 марта 2008 года
Cool Xacker
148 / / 06.06.2006
Что ни у кого нет вариантов???
АУ-АУ, специалисты и эксперты где вы??? ну подскажите хоть что нибудь!!! :(
286
17 марта 2008 года
misha_turist
572 / / 28.11.2005
Для начала скажи, что ты подразумиваешь по термином "индексный файл".;)
1.9K
19 марта 2008 года
Cool Xacker
148 / / 06.06.2006
Посдкажите пожалуйста, как мне в listview загрузить текстовый файл с разделителем типа "|"???

например текст в текстовом файле таков:


1|Фамилия1|
2|Фамилия2|

и т.д.

Его надо отобразить в listview без разделительного знака, по столбцам и строкам :confused:
3.2K
19 марта 2008 года
Гудвин
186 / / 22.12.2007
что-то структура текстового файла у тебя не особо понятная, тебе просто список загрузить чтоли нужно? или ветвление какое-то подразумевается?
1.9K
20 марта 2008 года
Cool Xacker
148 / / 06.06.2006
Мне необходимо чтобы информация из текстового файла загружалась в listview по столбцам и строкам (информация в тектовом файле должна храниться с разделителями типа: "|")
1.9K
20 марта 2008 года
andriano
474 / / 10.01.2008
И в чем проблема?
То, что от начала строки до первого "|" помещаешь в первый столбец, от первого "|" до второго - во второй и т.д.
1.9K
20 марта 2008 года
Cool Xacker
148 / / 06.06.2006
вот как это сделать, вот в чём вопрос!!!
3.2K
20 марта 2008 года
Гудвин
186 / / 22.12.2007
для начала с функциями обработки string разберись
потом в цикле читаешь из файла по одной строке, а во внутреннем цикле считанную строку разбераешь по словам
1.9K
20 марта 2008 года
Cool Xacker
148 / / 06.06.2006
примера нет???
как сохранять у меня есть процедура, а вот как загружать, то с этим проблема!!!
1.9K
20 марта 2008 года
Cool Xacker
148 / / 06.06.2006
Вот мой код загрузки из файла в listview, но он не работает, где ошибка, скажите пожалуйста:

Код:
procedure TForm1.Button6Click(Sender: TObject);
var kolRow, b, j, k:integer;
f:textfile;
begin
 kolRow:=0;//кол-во строк, относящихся к служебной информации
 assignfile(f,'Отчёт1.txt');//связываем переменную с текстовым файлом
 reset(f);//открываем файл для чтения
 i:=0;//устанавливаем начальный индекс строк
 while not eof(f) do//цикл заполнения таблиц из базы данных
 begin
  readln(f,s);//читаем текст из текущей строки файла и записываем его в переменную S
  b:=1;//устанавливаем начальный номер 1-го символа слова
  j:=0;//устанавливаем начальный индекс столбцов
  i:=i+1;//увеличиваем индекс строк
  for k:=1 to length(s) do//цикл сортировки данных в строке
   begin
    if s[k]='|' then//проверяем наличие разделителя
     begin
      ListView2.Items[j].SubItems:=copy(s,b,k-b);//записываем в ячейку значение
      b:=k+1;//запоминаем номер символа, с которого начинается новое слово
      j:=j+1;//увеличиваем номер столбца
     end;
    end;
 end;
end;
3.2K
20 марта 2008 года
Гудвин
186 / / 22.12.2007
с ListView-м как-то не работал
может как-то так:
Код:
var f:textfile;s,b:string;i:integer;n:TListItem;
begin
try
assignfile(f,'Отчёт1.txt');
reset(f);
i:=0;
while not eof(f) do
  begin
  readln(f,s);
  n:=ListView2.Items.Add;
  while s<>'' do
    begin
     b:=copy(s,1,pos('|',s)-1);
    if n.Caption='' then n.Caption:=b
    else
     n.SubItems.Add(b);
     delete(s,1,pos('|',s));
    end;
   inc(i);
  end;
finally
closefile(f);
end;
end;

з.ы. в текстовом файле каждая строка обязательно должна заканчиваться на |
здесь лучше StringGride использовать
1.9K
21 марта 2008 года
Cool Xacker
148 / / 06.06.2006
спасибо за ответ, нет stringrid не подходит, нужно именно listview
1.9K
21 марта 2008 года
Cool Xacker
148 / / 06.06.2006
вот нашёл все процедуры по работе с listview (загрузка из файла/загрузка в файл с разделителем), ловите код кому ну очень необходимо:

Процедура по загрузке данных из файла в ListView:
Код:
Procedure ReadListView(S: String; ListView: TListView);
Const Razdel = '|';
Var f: TextFile;
Begin
 AssignFile(f, 'base\base.db');
 Reset(f);
 try
  While not Eof(f) Do
   Begin
    ReadLn(f,S);
    With ListView.Items.Add Do
     Begin
      Caption:=Copy(S,1,Pos(Razdel,S)-1);
      System.Delete(S,1,Pos(Razdel,S));
      S:=StringReplace(S,Razdel,#13#10,[rfReplaceAll]);
      SubItems.Text:=S;
     End; {With}
   End; {While}
 finally
  CloseFile(f);
 end;
End;


А при нажатии кнопки её вызываем так:
 
Код:
ReadListView('base\base.db', ListView1);


Вот процедура сохранения данных в файл:
Код:
Const Razdel = '|';
var f:textfile;
s:string;
i:integer;
begin
AssignFile(f, 'base\base.db');
ReWrite(f);
try
 With ListView1 Do For i:=0 to Items.Count - 1 Do
  WriteLn(f,StringReplace(Items.Caption + Razdel + Items.Item.SubItems.Text,#13#10,Razdel,[rfReplaceAll]));
finally
 CloseFile(f);
end;


Всё прекрасно работает, сам уж попробовал.

Всем спасибо за участие ;)
1.9K
25 марта 2008 года
Cool Xacker
148 / / 06.06.2006
ещё вопрос, а как, чтобы при выделении какой либо в listview строки с данными, открывалось окно и поля заполнялись данными из этих столбцов (столбцов в listview больше 3)
286
25 марта 2008 года
misha_turist
572 / / 28.11.2005
Цитата: Cool Xacker
ещё вопрос, а как, чтобы при выделении какой либо в listview строки с данными, открывалось окно и поля заполнялись данными из этих столбцов (столбцов в listview больше 3)


 
Код:
procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
begin
if Selected
then ShowMessage(Item.Caption);
end;
1.9K
25 марта 2008 года
Cool Xacker
148 / / 06.06.2006
Но мне нужно чтобы edit'ы заполнялись данными из выделенной строки (столбцов 4 и более)

Мой код:

 
Код:
edit2.text:=ListView1.Selected.Caption;
edit3.text:=ListView1.Selected.SubItems.text;
edit4.text:=ListView1.Selected.SubItems.text;
edit5.text:=ListView1.Selected.SubItems.text;


например строка в listview:
Номер|Дата |Событие |
1 |12.03.2008|Приветствие|

значит edit заполнится так:
edit1.text= 1
edit2.text=12.03.2008
edit3.text=Приветствие

Вот как мне надо, они заполняют только первый edit, а во второй пишут все остальные данные не разделяя
286
25 марта 2008 года
misha_turist
572 / / 28.11.2005
Цитата: Cool Xacker
Но мне нужно чтобы edit'ы заполнялись данными из выделенной строки (столбцов 4 и более)

Мой код:

 
Код:
edit2.text:=ListView1.Selected.Caption;
edit3.text:=ListView1.Selected.SubItems.text;
edit4.text:=ListView1.Selected.SubItems.text;
edit5.text:=ListView1.Selected.SubItems.text;


например строка в listview:
Номер|Дата |Событие |
1 |12.03.2008|Приветствие|

значит edit заполнится так:
edit1.text= 1
edit2.text=12.03.2008
edit3.text=Приветствие

Вот как мне надо, они заполняют только первый edit, а во второй пишут все остальные данные не разделяя



Код:
[LEFT]procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
[LEFT] Selected: Boolean);
begin
if Selected
then begin
edit2.text:=Item.Caption;
edit3.text:=Item.SubItems[0];
edit4.text:=Item.SubItems[1];
edit5.text:=Item.SubItems[2];[/LEFT]
 
[LEFT]end;
end;[/LEFT]

[/LEFT]

Для справки SubItems имеет тип TStrings.... и как следствие его св-во Text выдаёт ВЕСЬ текст в нём содржащийся.....

Без обид, но справку по св-вам и методам читать то надо...
1.9K
25 марта 2008 года
Cool Xacker
148 / / 06.06.2006
Цитата: misha_turist
Код:
[LEFT]procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
[LEFT] Selected: Boolean);
begin
if Selected
then begin
edit2.text:=Item.Caption;
edit3.text:=Item.SubItems[0];
edit4.text:=Item.SubItems[1];
edit5.text:=Item.SubItems[2];[/LEFT]
 
[LEFT]end;
end;[/LEFT]

[/LEFT]

Для справки SubItems имеет тип TStrings.... и как следствие его св-во Text выдаёт ВЕСЬ текст в нём содржащийся.....

Без обид, но справку по св-вам и методам читать то надо...



Скажи пожалуйста, а
edit3.text:=Item.SubItems[0]; тоже самое что и edit3.text:=Item.SubItems.strings[0]; или нет

286
25 марта 2008 года
misha_turist
572 / / 28.11.2005
Да. Дело в том, что св-во strings в TStrings объявлено как " property Strings[Index: Integer]: string read Get write Put; default;". А к свойству обявленому с такой директивой можно обращаться на прямую.
Поэтому вызывая "SubItems[0]" ты фактически вызываешь "SubItems.strings[0]".
1.9K
25 марта 2008 года
Cool Xacker
148 / / 06.06.2006
огромнейшее спасибки (везде инфу про listview искал, в основном ничего нет и справочников так же нет)
286
25 марта 2008 года
misha_turist
572 / / 28.11.2005
Стандартная справка тебе в руки.... Я все ответы для тебя именно там или великим и могучим методом научного тыка нашёл.
1.9K
25 марта 2008 года
Cool Xacker
148 / / 06.06.2006
Спасибки
а можешь мне дать ссылку на эту справку или скинуть на мыло: [email]shicko@land.ru[/email]

Ну и коль завели вопрос по поводу этого list view, тогда как сортировать по столбцам, искать данные???
286
25 марта 2008 года
misha_turist
572 / / 28.11.2005
Выделяешь свой эллемент на форме и нажимаешь F1. Или наводишь курсор в редакторе на его тип и нажимаешь F1.

А по поводу второго вопроса - смотри предыдущие два предложение. ;)
1.9K
25 марта 2008 года
Cool Xacker
148 / / 06.06.2006
окей, спасибки, нашёл (очень не здорово что на не нашем, но что поделать)
286
25 марта 2008 года
misha_turist
572 / / 28.11.2005
:)))) Ну так а мозги на что.... книжечка словарик или програмка переводчик и будет тебе счастье!

Ты спасибо скажи, что ещё с БД серьёзным не работал, там без документации ни куда... а её МНОГО.... и по Русски ни чего нету... :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог