Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2012, 19:46   #51
JekaDefer
Форумчанин
 
Регистрация: 07.04.2009
Сообщений: 112
По умолчанию

спс я разберу попозже немног, а ща опишу на данный момент мои мысли). Я прост сегодня курсовой экзамен по физ подготовке сдал)))
Мысли:
понимаешь в чем суть, я уже понял что TStringList не подходит для моей задачи. Но смотри, в итоге то получилось сохранять нормально то что в нем находится, а вот загружать не получается почему то, так что наполовину вопрос был все-таки решен. У меня теперь задача такая.. вот например есть S: Array[0..1000] String - чтобы его хранить в шифрованном виде и в минимальном размер (по крайней мере мне так казалось) я преобразовывал в памяти его в одну длинную строку типа String, которая выглядела так: "00004текст00005фраза00006строк а" где цифры - Length(строки которую нужно после них считать). Я знаю, что можно было бы хранить длину в Integer и использовать для этого TMemoryStream, TFileStream или что то вроде TStringStream(но не уверен) но мне потом нужно чтоб вся моя в итоге получившаяся длинная строка(в которой находится вся запись с массивами различных данных) шифровалась и без всяких доп данных тупо вся записывалась в файл. то есть в файле только шифрованная эта строка. Я пробовал как мне советовали здесь в посте №42 но не могу сообразить как это сделать. В примере приведенном там хранится только 1 строка а мне надо в одной строке в памяти кучу строк(различных данных) и чтоб когда она в итоге сохранялась, то в файле не было "длина строки+строка".
JekaDefer вне форума Ответить с цитированием
Старый 17.05.2012, 22:21   #52
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Когда в файле, пусть даже зашифрованном не будет длины строки, то как ты будешь узнавать что одна строка кончилась а другая началась ? можно использовать маркер (но будут скорее всего сложности с шифрованием, ведь может при шифровке получиться символ-маркер), и это лишний байт, плюс необходимость посимвольного чтения, а вот если хранить длину, то это 2 байта (не обязательно интежер хранить можно и ворд) на длину строки и никакого гемора с коллизией маркера, посимвольным чтением (читай переаллокацией строки или использования массива-буффера)
Тебе так критичны 1-2 байта, при строках в несколько сот символов ?
phomm вне форума Ответить с цитированием
Старый 17.05.2012, 23:37   #53
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Текстовые и двоичные данные смешивать не следует.

Строка (текст) -> шифрование -> двоичные данные (зашифрованный текст)
Двоичные данные (зашифрованный текст) -> дешифрование -> строка (текст)

Представлять двоичные данные в виде строки - далеко не самая удачная идея. А уж хранить их в TStringList - и того хуже. TStringList - он по определению работает с набором строк. О каком наборе строк можно говорить по отношению к двоичным данным?

Цитата:
В примере приведенном там хранится только 1 строка а мне надо в одной строке в памяти кучу строк(различных данных) и чтоб когда она в итоге сохранялась, то в файле не было "длина строки+строка".
Посмотри:
http://www.gunsmoker.ru/2011/10/pascal.html
http://www.gunsmoker.ru/2011/11/blog-post_12.html
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.

Последний раз редактировалось Stilet; 18.05.2012 в 07:56.
GunSmoker вне форума Ответить с цитированием
Старый 18.05.2012, 00:43   #54
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

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

записать массив строк в файл легко можно так:
Код:
var S : array[0..1000] of AnsiString;
   W : longint;
....
    for i:=0 to 1000 do begin 
       W := length(S[i]);
       {записываем сначала длину строки}
       BopStream.WriteBuffer(W, sizeof(W));
       {потом, собственно строку}
        if W>0 then
           BopStream.WriteBuffer(S[i][1], W);
    end;
ВСЁ!!

читать примерно так:
Код:
var S : array[0..1000] of AnsiString;
   W : longint;

...

   for i:=0 to 1000 do begin
     BopStream.ReadBuffer(W, sizeof(W));
     if W = 0 then S[i] := ''
     else begin
        SetLength(S[i], W);
        BopStream.ReadBuffer(S[i][1], W);
     end;
  end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.05.2012, 07:59   #55
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Всю тема не осилил, но стесняюсь спросить, а почему в БД не хранить данные? Или в INI файлах?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.05.2012, 10:26   #56
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

ТС записать и сосчитать из файла то не может, а вы про БД и ini-файлы... Хотя тут уже столько вариантов прозвучало хороших, что можно было на их основе уже доделать как нужно и не париться.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 18.05.2012, 20:22   #57
JekaDefer
Форумчанин
 
Регистрация: 07.04.2009
Сообщений: 112
По умолчанию

ребят вы меня не понимайте прост) Я просто вижу самое оригинальное решение в том чтобы в памяти в одну длинную строку ссумировать строки и все данные массивов и их длинны.. то есть получится одна длииинная строка в ПАМЯТИ! а потом ее шифруем(в памяти) и сохраняем то что получилось в файл! и обратно. Про ини файлы молчу.. этот способ не подойдет потому что опять же длинна строки максимум 255 символов)) Про БД тож нет смысла, потому что их можно открыть в том же accesse к примеру пусть даже если сменить расширение файла. Лан ща выложу программку в которой реализовано то что я описал, но все операции делаются со String (т.е. булевский тип чтоб хранить то это символы 0 и 1, если нужно хранить число 23 (Integer) то это String "00023". и тд. Просто я думаю что можно сделать такую же строку но integer уже к примеру будет занимать 4 байта а не 5 или 10 как у меня. только у меня что то не получается. В программе жмем на кнопки по по порядку 1-2-3(запись данных в строку), 4-5-6 (чтение из строки)
Вложения
Тип файла: rar XModule.rar (18.0 Кб, 4 просмотров)

Последний раз редактировалось JekaDefer; 18.05.2012 в 20:30.
JekaDefer вне форума Ответить с цитированием
Старый 18.05.2012, 20:31   #58
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Цитата:
Сообщение от JekaDefer Посмотреть сообщение
ребят вы меня не понимайте прост) Я просто вижу самое оригинальное решение в том чтобы в памяти в одну длинную строку ссумировать строки и все данные массивов и их длинны.. то есть получится одна длииинная строка в ПАМЯТИ! а потом ее шифруем(в памяти) и сохраняем то что получилось в файл! и обратно. Про ини файлы молчу.. этот способ не подойдет потому что опять же длинна строки максимум 255 символов)) Лан ща выложу программку в которой реализовано то что я описал, но все операции делаются со String (т.е. булевский тип чтоб хранить то это символы 0 и 1, если нужно хранить число 23 (Integer) то это String "00023". и тд. Просто я думаю что можно сделать такую же строку но integer уже к примеру будет занимать 4 байта а не 5 или 10 как у меня. только у меня что то не получается
Можно увидеть постановку задачи?

Цитата:
Про БД тож нет смысла, потому что их можно открыть в том же accesse к примеру пусть даже если сменить расширение файла.
Ага, а твой чудо фаил можно открыть блокнотом.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 18.05.2012, 20:37   #59
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

JekaDefer, по-моему, это ты чего-то не понимаешь.

Есть две вещи:
1. Как хранить.
2. Что хранить.

1 может быть ini-файл, текстовый файл, двоичный файл своего формата, БД и так далее.
2 может быть данные в чистом виде, кодированные данные и зашифрованные данные.

1 от 2 никак не зависит и наоборот.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 18.05.2012, 20:40   #60
JekaDefer
Форумчанин
 
Регистрация: 07.04.2009
Сообщений: 112
По умолчанию

просто вы с таким не сталкивались вот и все)
JekaDefer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Tstringlist - максимальная длинна строки и макс.кол-во строк? paravoz1k Компоненты Delphi 4 03.02.2020 13:52
Удалить пустые строки из TStringList apromix Общие вопросы Delphi 5 14.09.2016 12:14
Куда деваются русские буквы? Islam_2011 Общие вопросы C/C++ 2 18.09.2011 10:20
Добавление в TMemo, последней строки из TStringList OPF_Nik Помощь студентам 3 31.01.2010 17:35
Подскажите, куда деваются переаменные? Visual C++ Sh2009 Помощь студентам 4 07.05.2009 00:34