Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Delphi]Удаление строк файла до символа, нужно удалить строки файла до символа ‰ 
:(
    Опции темы
shoker
Дата 28.7.2012, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 19.5.2012

Репутация: нет
Всего: нет



вот такая проблемка,есть файл(не текстовый)это скорее зашифрованный png,вот,в нем есть строка например,"hi,world!‰png"файлов несколько,и у них разная длина строк,может быть их 10 строк.так вот,нужно удалить все строки/символы до ‰png,и сохранить например в папку "картинки",но при этом изменения не должны сохранится в исходный файл

заранее спасибо за ответ:-)
PM MAIL   Вверх
Чучмек
Дата 28.7.2012, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 7
Всего: 41



для неюникодной delphi
Код

h1:=fileopen(filename,0);
fs:=getfilesize(h1,nil);
getmem(p1,fs);
fileread(h1,p1^,fs);
p2:=strpos(p1,'‰png');
if p2<> nil then
 begin
 h2:=filecreate(newfilename);
 filewrite(h2,p2^,fs-(cardinal(p2)-cardinal(p1)));
 fileclose(h2);
 end;
freemem(p1);
fileclose(h1);


Добавлено @ 23:09
Для юникодной вместо strpos  - AnsiStrPos

Добавлено позже
писал без delphi, ввела в заблуждение неправильная справка StrPos
Правильно вот
Цитата

function StrPos(const Str1, Str2: PChar): PChar;
StrPos returns a pointer to the first occurrence of Str2 in Str1. If Str2 does not occur in Str1, StrPos returns nil 


Это сообщение отредактировал(а) Чучмек - 29.7.2012, 11:25


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
shoker
Дата 28.7.2012, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 19.5.2012

Репутация: нет
Всего: нет



Цитата(Чучмек @ 28.7.2012,  23:04)
для неюникодной delphi
Код

h1:=fileopen(filename,0);
fs:=getfilesize(h1,nil);
getmem(p1,fs);
fileread(h1,p1^,fs);
p2:=strpos('‰png',p1);
if p2<> nil then
 begin
 h2:=filecreate(newfilename);
 filewrite(h2,p2^,fs-(cardinal(p2)-cardinal(p1)));
 fileclose(h2);
 end;
freemem(p1);
fileclose(h1);


Добавлено @ 23:09
Для юникодной вместо strpos  - AnsiStrPos

спс,а можно var написать?
PM MAIL   Вверх
shoker
Дата 29.7.2012, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 19.5.2012

Репутация: нет
Всего: нет



файлик

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  x3RMSFILE1x9v28_23.rms 2,52 Kb
PM MAIL   Вверх
Чучмек
Дата 29.7.2012, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 7
Всего: 41



Так ‰png != ‰PNG
Код

function binpos(p:pointer;substr:pchar;length:cardinal):pointer;
var i,j,l:cardinal;
begin
i:=0;
l:=strlen(substr);
length:=length-l;
result:=nil;
while i<=length do
 begin
 for j:=0 to l-1 do
   if pchar(cardinal(p)+i+j)^<>(substr+j)^ then break;
 if j=l then
   begin
   result:=pointer(cardinal(p)+i);
   break;
   end;
 inc(i);
 end
end;




procedure TForm1.Button1Click(Sender: TObject);
var
 h1,h2,fs:cardinal;
 p1,p2:pointer;
begin
if not opendialog1.Execute or not savedialog1.Execute then exit;
h1:=fileopen(opendialog1.FileName,0);
fs:=getfilesize(h1,nil);
getmem(p1,fs);
fileread(h1,p1^,fs);
p2:=binpos(p1,'‰PNG',fs);
if p2<> nil then
 begin
 h2:=filecreate(savedialog1.FileName);
 filewrite(h2,p2^,fs-(cardinal(p2)-cardinal(p1)));
 fileclose(h2);
 end;
freemem(p1);
fileclose(h1);

end;




--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
shoker
Дата 30.7.2012, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 19.5.2012

Репутация: нет
Всего: нет



как должно быть:

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  x3RMSFILE1x9v28_23.png 13,90 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0497 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.