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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2020, 06:16   #1
dwa_e
 
Регистрация: 06.01.2008
Сообщений: 8
Вопрос Заменить CR/LF на LF или что происходит с файлом.

Есть файл из UNIX системы, в нём содержится МАС адрес, в исходном состоянии файл имеет размер 18байт, но после простой манипуляции через StringList на выходе получаем 19байт. Что происходит?
Код:
var
SL1:TStringList;
begin
 SL1:= TStringList.Create;
 SL1.LoadFromFile('macid');
 SL1.SaveToFile('macid');
 SL1.Free;
end;
Дописывается «возврат каретки» (CR) или 0x0D или #13(кому как нравится), а в исходном файле в конце строки только «подача на строку» (LF) или 0x0A или #10. Выглядит это так
Код:
41 41 3A 42 42 3A 43 43 3A 44 44 3A 45 45 3A 46 46 0D 0A
помогите избавиться от 0D.
использую RAD Studio 10.3
dwa_e вне форума Ответить с цитированием
Старый 30.04.2020, 16:48   #2
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,869
По умолчанию

Цитата:
Сообщение от dwa_e Посмотреть сообщение
помогите избавиться от 0D.
А зачем от него избавляться?
northener на форуме Ответить с цитированием
Старый 30.04.2020, 19:15   #3
dwa_e
 
Регистрация: 06.01.2008
Сообщений: 8
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
А зачем от него избавляться?
затем, что Unix не понимает этот файл в котором 0D, это пример с файлом из одной строки, а есть файлы и по 500 строк.
dwa_e вне форума Ответить с цитированием
Старый 01.05.2020, 16:58   #4
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,869
По умолчанию

Код:
var
  S : string;
  mf : TFileStream;
begin
  S:=SL1.Text;
  S:=StringReplace(S,#13#10,#10,[rfReplaceAll]);
  mf:=TFileStream.Create('TextWithout0D.txt',fmCreate);
  mf.Write(S[1],Length(S));
  mf.Free;
end;
northener на форуме Ответить с цитированием
Старый 02.05.2020, 12:17   #5
dwa_e
 
Регистрация: 06.01.2008
Сообщений: 8
По умолчанию

спасибо, всё получилось, только из-за особенности RAD Studio всё делать в юникод, переменная S должна быть
Код:
S : ansistring;
иначе на выходе получаем файл нужного размера, но данные в юникоде и обрезаны.
Код:
41 00 41 00 3A 00 42 00 42 00 3A 00 43 00 43 00 3A 00
dwa_e вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как заменить файл другим файлом в delphi! liorbraiz Общие вопросы Delphi 11 17.03.2016 01:32
дана матрица, заменить 1 столбец столбцом с минимальной суммой элементов, последний столбец заменить столбцом Anonim41 Паскаль, Turbo Pascal, PascalABC.NET 0 24.06.2014 21:11
в массиве все максимальные элементы заменить первым элементом, а все минимальные элементы заменить последним элементом Валерия2701 Паскаль, Turbo Pascal, PascalABC.NET 1 12.10.2011 15:49
Как происходит Компиляция? ZhekON Свободное общение 21 22.04.2010 10:06
Что происходит во время Win+D? Altera Общие вопросы Delphi 13 15.12.2009 05:16