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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2017, 12:54   #1
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию Странная проблемка с Byte(#10))

Нужно из строк сделать файл с окончаниями строк как в Unix. Пытаюсь сделать так:
Код:
var
  S1, S2, S3, S4, S5, AppDir: string;
  i,j:integer;
  BaseFile : File of byte;
begin
  S1 := ....;
  S2 := ....;
  S3 := ....;
  S4 := ....;
  S5 := ....; //необходимые строки

  AppDir:=ExtractFilePath(Application.ExeName);

  AssignFile(BaseFile, AppDir+'TestBase.txt');
  Rewrite(BaseFile);
  Write(BaseFile, Byte(S1[j]));
  Write(BaseFile,Byte(#10));
  Write(BaseFile, Byte(S2[j]));
  Write(BaseFile,Byte(#10));
  Write(BaseFile, Byte(S3[j]));
  Write(BaseFile,Byte(#10));
  Write(BaseFile, Byte(S4[j]));
  Write(BaseFile,Byte(#10));
  Write(BaseFile, Byte(S5[j]));
  Write(BaseFile,Byte(#10));
  CloseFile(BaseFile);
  ShowMessage('End');

end;
Но на Byte(#10) компилятор выдаёт "variable required". Почему? Как быть не убирая эту строку Write? Чем ему не нравится именно этот символ, если с частями строки всё проходит гладко, даже если тот же самый #10 добавить в конец строк?
Ship_1 вне форума Ответить с цитированием
Старый 26.09.2017, 13:29   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Компилятору тут не нравится константа, ждет переменную
Код:
  b:=Byte(#10);
  Write(BaseFile,b);
Есть же более современные и удобные объекты в делфях, ну так например
Код:
  xList:=TStringList.Create;
  xList.Add('fdc');
  xList.Add('123');
  xList.Add('9Е 466');
  s:=StringReplace(xList.Text,#13#10,#10,[rfReplaceAll]);
  xStream:=TMemoryStream.Create;
  xStream.Write(s[1],Length(s));
  xStream.SaveToFile('e:\MyNewFile.dat');
  xList.Free;
  xStream.Free;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 26.09.2017 в 14:06.
Аватар вне форума Ответить с цитированием
Старый 26.09.2017, 15:06   #3
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Интересно. Спасибо. А поток чтобы StringList не добавил таки #13#10 при сохранении? И подойдёт ли этот метод для очень больших файлов, в миллион строк или в несколько миллионов?
Ship_1 вне форума Ответить с цитированием
Старый 26.09.2017, 15:15   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
А поток чтобы StringList не добавил таки #13#10 при сохранении?
да
Цитата:
И подойдёт ли этот метод для очень больших файлов, в миллион строк или в несколько миллионов?
Ну считай - 10 символов в строке на миллион строк - порядка 11 мегабайт в памяти и это трижды - стринглист, строковая переменная и поток. Хотя стринглист можно освободить после переноса текста в переменную, значит дважды. Ну и как там по времени StringReplace будет себя чувствовать на большом объеме данных ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 26.09.2017 в 15:21.
Аватар вне форума Ответить с цитированием
Старый 26.09.2017, 15:41   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

для больших объёмов я бы лично сразу строки писал в файл через TFileStream.WriteBuffer() без всяких хитростей с TStringList и необходимостью делать StringReplace.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с byte[] КолиК29 C# (си шарп) 3 29.11.2021 17:18
IntPtr в byte[] DronLee Общие вопросы .NET 1 26.06.2015 16:22
byte to int Миша52 Помощь студентам 0 31.01.2015 22:14
2 byte to Word Digital_Slavik Общие вопросы Delphi 6 26.12.2010 11:49
file of byte medikk Общие вопросы Delphi 1 11.08.2008 16:00