Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как в памяти хранить таблицу из 5 колонок?


Страницы:   1 2

DINOEL ©   (2007-08-09 14:24:00) 

Здравствуйте, уважаемые.

У меня есть такая табличка в файле
Дата | Номер | Наименование | Сумма
, я её должен загрузить в память для дальнейшей работы (разберу строку)

Подскажите, пожалуйста, как мне хранить данные в памяти и работать с данными  ?

В виде массива ?
Или может быть есть что нибудь лучшее ?


DINOEL   (2007-08-09 16:48:00) [1]

всем спасибо, буду думать :)


stanislav   (2007-08-09 16:46:00) [2]

Sergey13 ©   (09.08.07 16:35) [25]
>По мне лучше с ними вообще не работать
Опередил :-)


stanislav   (2007-08-09 16:35:00) [3]

tesseract ©   (09.08.07 16:31) [23]
Можно и через ADO с помощью драйвера JET, намного лучше чем все остальное, сможешь использовать ряд функций недоступных обычным DBF

Если есть возможность не работать с dbf, то и не начинай - сразу MSSQL


Sergey13   (2007-08-09 16:35:00) [4]

> [20] DINOEL ©   (09.08.07 16:22)
> с помощью чего лучше всего работать с DBF-файлами
По мне лучше с ними вообще не работать (особенно заново разрабатывать), если проект не 1-2 табличный.
К тому же DBF - нет такой СУБД. Есть много СУБД, где такое расширениеимеют файлы данных. Так что DBF DBF-у рознь.


novill   (2007-08-09 16:33:00) [5]

> [0] DINOEL ©   (09.08.07 14:24)

А ты пробовал TclientDataset ???


tesseract   (2007-08-09 16:31:00) [6]


> DBF - BDE


Лучше через dbExpress. BDE чуть-чуть скончался.


DINOEL   (2007-08-09 16:31:00) [7]

stanislav ,Tnx !


stanislav   (2007-08-09 16:28:00) [8]

DINOEL ©   (09.08.07 16:22) [20]
DBF - BDE
MSSQL - ADO


DINOEL   (2007-08-09 16:22:00) [9]

Sergey13
Кстати,раз уж заговорили, может быть подскажете на будущее, с помощью чего лучше всего работать с DBF-файлами ?


DINOEL   (2007-08-09 16:13:00) [10]

Kolan ,спасибо за ссылку, обязательно прочту !
Sergey13, дело в том, что это разовая работа и данные хранятся именно в текстовом файле, поэтому сделаю с помощью класса и TStrings, тем самым изучу ещё предметную область ,но совсем скоро, действительно нужно будет писать приложение для работы с DBF а так же mssql - вот уж где ,наверное придётся попотеть :)


Kolan   (2007-08-09 15:55:00) [11]

> Может подумать в эту сторону?

Я тоже согласен что это работа с БД, но все выше сказаное остаётся в силе.
Только вместо LoadFromFile будет SQL запрос…


Sergey13   (2007-08-09 15:53:00) [12]

> [15] DINOEL ©   (09.08.07 15:32)

Не покидает меня смутное ощущение, что ты начинаешь работу с базами данных, но еще не осознал этого. 8-)
Может подумать в эту сторону? Типа перегнать твой файлик в какую нибудь СУБД-шку типа xBase (можно через Ексель) и работать методами БД?


Kolan   (2007-08-09 15:40:00) [13]

> Огромное спасибо за то

Незачто, знай делая так как я предложил ты поступаешь хорошо(очень хорошо) с точки зрения теори ООП.

Прочти книгу:
Craig_Larman_Applying_UML_and_patterns_SE.djvu
Брать тут:
http://www.uml2.ru/

Она сечас для тебя сложная. Но, имхо, чем раньше её прочтешь, тем лучьше для мозгов…


DINOEL   (2007-08-09 15:32:00) [14]

Kolan, разобрался :)
Огромное спасибо за то ,что разложили ответ по полочкам !


Kolan   (2007-08-09 15:30:00) [15]

> Но вот непонятно (это уже теория DELPHI ) как потом обращаться
> к этим полям ?  + при вызове этого метода старые значения
> полей же будут перетираться ?

Это вопрос я не понял.

Делаешь свойства:
TSaleLineItem = class
strict private
  FName: string;
 FNumber: Integer;
public
 procedure AssignFromString(S: string);
  property Name: string read FName write FName;
end;


Kolan   (2007-08-09 15:28:00) [16]

> Т.е. я создаю класс:
>
> TSaleLineItem = class
> strict private
> name:string;
> number:integer;
> и тд.
> public
> procedure AssignFromString(S: string);
> end;

Раз начинающие, замечу что правильнее оформлять надо:

TSaleLineItem = class
strict private
FName: string;
FNumber: Integer;
public
 procedure AssignFromString(S: string);
end;

А  так да — верно.


> вызываю метод SaleLineItem.AssignFromString(параметр)
> и в качестве параметра передаю строку (которую получаю  
> в цикле выбрав строки из файла)

Да имено так. Раз файл текстовый, то используйте TStringList чтобы загрузить. Получится как-то так:

var
 Strings: TStrings;
 I: Integer;
 TempSaleLineItem: TSaleLineItem;
begin
 Strings := TStringList.Create;
 try
   Strings.LoadFromFile('C:/t.txt');
   for I := 0 to Strings.Count — 1 do
   begin
     TempSaleLineItem := TSaleLineItem.Create;
     TempSaleLineItem.AssignFromString(Strings[I]);
     {SaleLineItemList — сами думайте как его сюда передать.}
     SaleLineItemList.Add(TempSaleLineItem);
   end;      
 finally
   Strings.Free;
 end;
end;


DINOEL   (2007-08-09 15:23:00) [17]

Kolan
О ясно теперь, что мы класс наследуем от TObjectList
Большое спасибо за информацию !


DINOEL   (2007-08-09 15:21:00) [18]

Т.е. я создаю класс:

TSaleLineItem = class
strict private
name:string;
number:integer;
и тд.
public
procedure AssignFromString(S: string);
end;


вызываю метод SaleLineItem.AssignFromString(параметр)
и в качестве параметра передаю строку (которую получаю  в цикле выбрав строки из файла) - в этом методе происходит парсинг этой строки и заполняю поля.

Но вот непонятно (это уже теория DELPHI ) как потом обращаться к этим полям ?  + при вызове этого метода старые значения полей же будут перетираться ?

Прошу прощение за такие вопросы :)


Kolan   (2007-08-09 15:19:00) [19]

> Да, файлик будет на 1000 строк.

Это не очень много. Но если объем возрастет, то не стоит тащить(то есть загружать и создавать объекты) из фала все что там есть. Лучьше загружать то что надо, работать и удалять…

Но повторю 1000 — это мало, можно и все загрузить сразу. Выиграете в производительности…


Kolan   (2007-08-09 15:17:00) [20]

Примерно так
procedure AssignFromString(S: string);
begin
 FDate := Copy(S, 0, Pos(S, '|')-1);
end;


Если вам в памяти надо как бы всю таблицу(весь файл) представить.
То надо завести класс — список строк:

TSaleLineItemList = class(TObjectList)
public
 function Add(SaleLineItem: TSaleLineItem): Integer;
 property Items[Index: Integer]: TSaleLineItem read GetItem write SetItem;
end;


Как правильно реализовать
Add, GetItem, SetItemможно подсмотреть в TObjectList(он находится в модуле Contnrs).


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо