Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

замена символов в файле пропуском


AHoja ©   (2006-07-27 19:22:00) 

Здарова, как можно заменить определенный символ в файле пустым местом?


AHoja   (2006-07-27 22:49:00) [1]

Всем спасибо за помощь


@!!ex   (2006-07-27 21:00:00) [2]

>>Заменить-то она заменит, только уже в другом файле и не в соответствии с [2].

Другой файл решаеться на раз. Удалять первый, переименовывать....
Вроде так везде обнавление файлов делается.
Сначала создается временный файл, после чего старый удаляеться, временный переименовывается.

А вот несоответствие с условием - это да.....
Но автор же не сказал по какому алгоритму символы заменять.
Ему для конкретно его примера решение дал Джо.
Я постарался дать относительно универсальный пример.
Который заменяет все указанные символы на новые.


Юрий Зотов   (2006-07-27 20:57:00) [3]

> @!!ex ©   (27.07.06 19:48) [6]

Заменить-то она заменит, только уже в другом файле и не в соответствии с [2].


@!!ex   (2006-07-27 20:57:00) [4]

Удалено модератором


@!!ex   (2006-07-27 20:52:00) [5]

>>Какой размер, по-твоему, имеет Char
По моему он имеет размер 1 байт.
От -127 до 128, если мне конечно память не изменяет... ;)


Fay   (2006-07-27 20:21:00) [6]

2 @!!ex ©   (27.07.06 19:56) [10]
Какой размер, по-твоему, имеет Char?

> извени
Величим и магука


@!!ex   (2006-07-27 19:56:00) [7]

Джо ©   (27.07.06 19:54) [9]

Хорошо. Тока жестко.
Ладно, извени. Надо мной сегодня тоже ржали... :)

Я объясняю.
Дело в том, что в данном случае я работаю с файлом как с файлом символов.
Согласись, с любым файлом так можно работать.
И если ты откроешь бинарник, то в нем все символы честно заменяться, и если текстовый откроешь - тоже заменяться.


Джо   (2006-07-27 19:54:00) [8]

Удалено модератором


@!!ex   (2006-07-27 19:52:00) [9]

Удалено модератором


Джо   (2006-07-27 19:49:00) [10]

> Для текстовых, для бинарных, пофигу.

Нет, это только для file of char.


@!!ex   (2006-07-27 19:48:00) [11]

Вот. Для любых файлов. Для текстовых, для бинарных, пофигу.

Procedure ChangeFile(InPut_FileName,OutPut_FileName:string; OldChar, NewChar:char);
var
input,output:file of char;
c:char;
begin
AssignFile(input,InPut_FileName);
Reset(input);
AssignFile(output,OutPut_FileName);
Rewrite(output);
repeat
 read(input,C);
 if c=OldChar then
  Write(output,newchar)
 else
  Write(output,c);
until Eof(input);
CloseFile(input);
CloseFile(output);
end;


@!!ex   (2006-07-27 19:43:00) [12]

можно еще через while, pos, copy, но думаю будет медленнее.


Джо   (2006-07-27 19:42:00) [13]

Самое простое, но далеко не оптимальное:

var
 Lst: TStrings;
begin
 Lst := TStringList.Create;
 try
   Lst.LoadFromFile('filename');
   StringReplace (Lst.Text,'testing','tes ing',[rfReplaceAll]);
   Lst.SaveToFile('filename');
 finally
   Lst.Free;
 end;
end;


@!!ex   (2006-07-27 19:40:00) [14]

Так и надо говорить заменить пробелом. или #0.
Функция берет строку S и заменяет все символы равные C на пробелы, после чего возвращает преобразованную строку.
Как это связать с файлом, знаешь?

Function ChangeString(S:String; C:Char):string;
var
index:integer;
begin
Result:='';
for index:=1 to Length(S) do
if S[index]=C then
  Result:=Result+#32
else
  Result:=Result+S[index];
end;


AHoja   (2006-07-27 19:37:00) [15]

пример:

testing

заменить на:

tes ing


@!!ex   (2006-07-27 19:27:00) [16]

Что такое "Пустое место?"
Вырезать кусочек винчестера? Тогда там будет пусто место... Вакум....


Наверх

Титульная страница Поиск, карта сайта Написать письмо