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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2012, 17:29   #1
DelhiProgramer
Пользователь
 
Регистрация: 10.08.2012
Сообщений: 84
По умолчанию Сжатие строки

И ещё один вопрос
Как сжать строку? Хоть каким-нибудь образом?
Проблема в том, что строка может содержать все символы, от #0 до #255.
Все строки, опять же, длиной 48 символов.
DelhiProgramer вне форума Ответить с цитированием
Старый 05.11.2012, 17:55   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вообще-то, вопрос интересный..
Но непонятно, почему Вы не пробовали гуглить, например...
Да и зачем Вам сжимать строку - неясно..

Ну так, навскидку, возмите алгоритм сжатия LZW
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.11.2012, 17:57   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Сжать до чего?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.11.2012, 18:06   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Не, ну сжать набор строк куда не шло. Но поскольку у вас по сути двоичные данные, то они достаточно плохо сжатию поддаются. А уж 48-байтная строка после сжатия скорее длиннее станет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.11.2012, 18:12   #5
DelhiProgramer
Пользователь
 
Регистрация: 10.08.2012
Сообщений: 84
По умолчанию

Сжать до чего? Уменьшить размер
Тут возникла другая проблема. При записи в файл данные искажаются. Массив строк поочерёдно записываю в файл (for i:=1 to 4800 do writeln(f,st[i]) и также считываю (for i:=1 to 4800 do readln(f,st[i]). Данные до и после не сходятся. тут уже и сжатие не поможет

Последний раз редактировалось DelhiProgramer; 05.11.2012 в 18:15.
DelhiProgramer вне форума Ответить с цитированием
Старый 05.11.2012, 18:39   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Стесняюсь спросить а чего TStringList не используешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.11.2012, 19:23   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

тс, может читать как бинарные данные просто?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.11.2012, 10:21   #8
DelhiProgramer
Пользователь
 
Регистрация: 10.08.2012
Сообщений: 84
По умолчанию

Со StringList-ом похоже та же ерунда
Видимо, не получается записывать нулевые символы (#0).
А может там случайно где-нибудь выходит комбинация #13#10 и тогда он делает новую строку
DelhiProgramer вне форума Ответить с цитированием
Старый 06.11.2012, 10:48   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ОМГ.
Цитата:
Видимо, не получается записывать нулевые символы (#0).
А может там случайно где-нибудь выходит комбинация #13#10 и тогда он делает новую строку
Да. Да. Всё именно так. Потому как текстовые файлы (и TextFile, и TStringList.LoadFromFile/TStringList.SaveToFile) предназначены для обработки ТЕКСТОВЫХ данных! (читайте, _ПЕЧАТНЫХ_ символов).

для всего остального есть такая "волшебная" штука - TFileStream.
Он работает с бинарным потоком, ему глубоко всё равно, что у Вас там внутри - нулевые байты, не нулевые, переводы строки, табуляции, символы забоя и т.д. и т.п. Используйте его для записи/чтения своих файлов!



p.s. тема скатывается в явный оффтоп! Запись/чтение файла явно никакого отношения не имеют к сжатию строки!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.11.2012, 11:16   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
тема скатывается в явный оффтоп!
Я тоже перестал понимать что же всетки автору нужно.
На всякий случай скажу что в DXE есть хорошая библиотечка по сжатию - zLib в стандартной поставке.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сжатие изображений brain22 Мультимедиа в Delphi 1 06.06.2012 20:25
сжатие строки(написать cgi скрипт) marianna14 Помощь студентам 0 27.03.2011 20:25
Описать функцию CompressStr(S) строкового типа,выполняющую сжатие строки S Allen Iverson Паскаль, Turbo Pascal, PascalABC.NET 7 23.04.2009 01:07
Сжатие битмапа Rapid Мультимедиа в Delphi 7 08.12.2007 16:38
Проверка на сжатие vitalik007 Общие вопросы Delphi 3 20.08.2007 10:53