Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.02;
Скачать: CL | DM;

Вниз

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

 
DINOEL ©   (2007-08-09 14:24) [0]

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

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

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

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


 
stanislav ©   (2007-08-09 14:39) [1]

Вобще все зависит от цели. Можо БД организовать, можно  проще что-нибудь
Вот самый простой вариант у него ограничение на 100 записей.
TMyRecord = record
Data:TDate
NUMBER:Integer;
NAME:String;
SUM:Real;
end;

Var
MyRecords:Array [1..100] of MyRecord;


 
Sergey13 ©   (2007-08-09 14:43) [2]

> [0] DINOEL ©   (09.08.07 14:24)
> табличка в файле

Велик ли файл то?


 
Kolan ©   (2007-08-09 14:55) [3]

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

Однозначно завести объект.

Наверняка строка:
Дата | Номер | Наименование | Сумма
имеет имя в предметной области. Мне кажется что это 1 элемент в покупке.

Тогда можно завести класс:

TSaleLineItem = class
strict private
 {Тут поля}
public
 {Тут свойства доступа к полям.}
end;


И пусть вас не пугает что пока это просто контейнер(нет методов). Поверьте скоро у вас появятся методы, которые удобнее всего поместить в этот класс&#133


 
stanislav ©   (2007-08-09 15:04) [4]

+
Kolan ©   (09.08.07 14:55) [3]
И каждую запись записывать в этот объект и добавлять в TStringList;
S:=TStringList.Create;
...
O:=TSaleLineItem.Create;
....
S.AddObject(O,"jdhjfdh");
...


 
DINOEL ©   (2007-08-09 15:12) [5]

Да, файлик будет на 1000 строк.
И как правильно заметил ув.Kolan - каждая запись, это действительно один элемент.
Всем большое спасибо за подсказки.

А что, массив совсем не подходит  ?:)

Просто я пока ещё не работал с классами и объектами - делфи взял в руки совсем недавно :)


 
Kolan ©   (2007-08-09 15:14) [6]

> И каждую запись записывать в этот объект и добавлять в TStringList;

Нет.

Надо добавить в класс метод:

TSaleLineItem = class
strict private

public
 procedure AssignFromString(S: string);
end;


В методе AssignFromString распарсить(разобрать) строку вида Дата | Номер | Наименование | Сумма
И распихать данные по полям.
Примерно так


 
DINOEL ©   (2007-08-09 15:15) [7]

Хотя..думаю действительно объект тут будет кстати + хранить экземпляры в TStringList


 
DINOEL ©   (2007-08-09 15:16) [8]

Kolan :)
ого,
в общем обкладываюсь книгами.
Thx :)


 
Kolan ©   (2007-08-09 15:17) [9]

Примерно так
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).


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

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

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

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


 
DINOEL ©   (2007-08-09 15:21) [11]

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

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


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

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

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


 
DINOEL ©   (2007-08-09 15:23) [12]

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


 
Kolan ©   (2007-08-09 15:28) [13]

> Т.е. я создаю класс:
>
> 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;


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

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

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

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


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

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


 
Kolan ©   (2007-08-09 15:40) [16]

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

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

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

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


 
Sergey13 ©   (2007-08-09 15:53) [17]

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

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


 
Kolan ©   (2007-08-09 15:55) [18]

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

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


 
DINOEL ©   (2007-08-09 16:13) [19]

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


 
DINOEL ©   (2007-08-09 16:22) [20]

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


 
stanislav ©   (2007-08-09 16:28) [21]

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


 
DINOEL ©   (2007-08-09 16:31) [22]

stanislav ,Tnx !


 
tesseract ©   (2007-08-09 16:31) [23]


> DBF - BDE


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


 
novill ©   (2007-08-09 16:33) [24]

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

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


 
Sergey13 ©   (2007-08-09 16:35) [25]

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


 
stanislav ©   (2007-08-09 16:35) [26]

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

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


 
stanislav ©   (2007-08-09 16:46) [27]

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


 
DINOEL ©   (2007-08-09 16:48) [28]

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



Страницы: 1 вся ветка

Текущий архив: 2007.09.02;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.024 c
15-1186168050
Ламот
2007-08-03 23:07
2007.09.02
Чат для локалки


3-1178520314
mefodiy
2007-05-07 10:45
2007.09.02
SQL запрос в Oracle через ADOQuery


6-1168754919
DRtM
2007-01-14 09:08
2007.09.02
Проблемма с закачкой


15-1186171905
Kostafey
2007-08-04 00:11
2007.09.02
С днем рождения ! 4 августа


15-1186049365
DelphiN!
2007-08-02 14:09
2007.09.02
Делфовый аналог Copy, pos в JavaScript