Главная страница
    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.51 MB
Время: 0.035 c
9-1158666426
Nic
2006-09-19 15:47
2007.09.02
Нет диска к книге


6-1168779369
@gent
2007-01-14 15:56
2007.09.02
Как скрытно зайти на страницу ?


1-1182935318
tytus
2007-06-27 13:08
2007.09.02
FastReport 4.2.52 неправильно работает MemoOnBeforePrint


2-1186506722
viktoras
2007-08-07 21:12
2007.09.02
Создание меню


15-1185581224
Nic
2007-07-28 04:07
2007.09.02
Задержки зарплаты





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский