Текущий архив: 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;
И пусть вас не пугает что пока это просто контейнер(нет методов). Поверьте скоро у вас появятся методы, которые удобнее всего поместить в этот класс…
← →
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 строк.
Это не очень много. Но если объем возрастет, то не стоит тащить(то есть загружать и создавать объекты) из фала все что там есть. Лучьше загружать то что надо, работать и удалять…
Но повторю 1000 — это мало, можно и все загрузить сразу. Выиграете в производительности…
← →
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/
Она сечас для тебя сложная. Но, имхо, чем раньше её прочтешь, тем лучьше для мозгов…
← →
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 запрос…
← →
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.51 MB
Время: 0.035 c