lonejan |
Отправлено: 23.03.2007, 16:08 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 4
|
Есть структура CODE | struct rs {
char index[30];
float rest;
float reserve;
}; |
Выбираются товары из базы, заполняется структура, index — имя товара, может варьироватся от 5-25 символов, потом структура сохраняется в файл в цикле. Товаров выбирается около 150000, и очень не многе из них имеют наименование в 25 символов, большинство 5-12. Программа предназначена для обмена остатками товарами между филиалами по FTP, и размер файла очень важен. Как можно уменьшить размер файла? Я уже думал побайтно писать файл, и перед наименованием указывать его размер, но уж очень хочется пользоватся структурами. |
|
Guest |
Отправлено: 23.03.2007, 16:58 |
|
Не зарегистрирован
|
паковать файл перед отправкой |
|
lonejan |
Отправлено: 23.03.2007, 17:20 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 4
|
Это понятно, но всё же, можно как то менять размер чара в структуре? |
|
bred |
Отправлено: 23.03.2007, 17:56 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 15
|
QUOTE (lonejan @ 23.03.2007, 17:20) | Это понятно, но всё же, можно как то менять размер чара в структуре? |
можно попытатся ввести в структуру поле — размер структуры т.е. на приемном конце что-то типа:CODE |
struct MyStruct
{
int LenStr;
float rest;
float reserv;
char* Str;
}
|
ну и придется написать процедурку записи в файл и чтения из него |
|
Ramzay |
Отправлено: 23.03.2007, 20:00 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 31
|
CODE | struct MyStruct
{
int LenStr;
float rest;
float reserv;
char* Str;
}
|
И вместо наименования товара будет передаваться адрес строки, что то типа 00F9C85.
Тут нужно уходить от структуры. Структура сама по себе имеет фиксированную длину. Тебе нужно уходить от структуры и формировать строки переменной длины, которые заканчиваются разделитилями.
Упаковка данных решила бы все проблемы, даже при использовании строк фиксированной длины, т.е. такой структуры как ты описал. |
|
Admin |
Отправлено: 23.03.2007, 21:06 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
По моему правильно написал bred:
CODE |
struct MyStruct
{
short LenStr; // количество байт в строке
float rest;
float reserv;
char* Str; // указатель начала строки
}s;
|
В цикле пробегаеми по строкам смотрим LenStr текущей строки, выделяем память под строку s.Str = new char[s.LenStr+1];
записываем в файл.
CODE |
s.LenStr = Edit1->Text.Length();
if(s.LenStr ){
s.Str = new char[s.LenStr+1];
s.Str[s.LenStr] = 0;
strcpy(s.Str,Edit1->Text.c_str());
}
|
При чтении файла действуем также — смотрим LenStr и если не 0,
выделяем память для чтения нужного количества байт.
Также прав и Guest — упаковываете файл перед отправкой в zip
а там его будут предварительно распаковывать из zip.
|
|