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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2011, 12:48   #11
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

AssignFile тоже. И CloseFile )
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 22.09.2011, 14:13   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
f1, f2: TextFile;
угу. в Delphi так.
ну, тогда ещё вместо Assign надо использовать AssignFile()
и вместо Close() - CloseFile()

только это пустое. Там в файле запятые разделяют числа.
Они не дадут нормально отработать предложенному алгоритму...

если возможно заменить запятые на пробелы, тогда сработает такой код:
Код:
var
  f1, f2: TextFile;
  a: extended;
begin
  AssignFile(f1, 'c:\ВЗУ-2 Ввод-1 мощность.txt');
  AssignFile(f2, 'c:\2.txt');
  reset(f1);
  rewrite(f2); //открытие файла для перезаписи (если файл уже существовал, то он будет уничтожен)
  while not eof(f1) do
  begin
    if eoln(f1) then begin readln(f1); writeln(f2) end
    else begin
      read(f1, a); //читаем одно число в переменную а
      a := a * 1200;
      write(f2, a: 8: 4, ',');
    end;
  end;
  CloseFile(f2);
  CloseFile(f1);
end;
получаемый файл во вложении...
Вложения
Тип файла: txt 2.txt (13.1 Кб, 108 просмотров)

Последний раз редактировалось Serge_Bliznykov; 22.09.2011 в 14:17.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.09.2011, 16:20   #13
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Alex11223, я уже писал в одной из тем, AssignFile и.т.п это пережитки 80-х годов прошлого тысячелетия, которым пользуются господа Сишники.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var SL  : TStringList;
    i,N : integer;
begin
  SL := TStringList.Create;
  if FileExists('C:\file.txt') then
   SL.LoadFromFile('C:\file.txt');
  for i:=0 to SL.Count-1 do
  begin
   N:=StrToIntDef(SL.Strings[i], -1);
   if N=-1 then continue;
   SL.Strings[i] := IntToStr(N*1200);
  end;
  SL.SaveToFile('C:\file.txt');
  SL.Free;
end;
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 23.09.2011, 23:52   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

JUDAS,
1) C тут не при чём! это скорее пережитки классического Паскаля ( TurboPascal ).
Вы не поверите, но там не было TStringList, который Вы используете во всех случаях, когда нужно прочитать файл.

2) файлы бывают не только текстовые! В этом случает .LoadFromFile - "отдыхает"

3) автор темы выложил(а) файлик "ВЗУ-2 Ввод-1 мощность.txt". Он всего 10 кб.
Скачайте его. И убедитесь, что предложенный Вами код - НЕ РАБОТАЕТ с этим файлом.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.09.2011, 01:00   #15
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Вот у меня вопрос для целей собственного развития.
А ведь можно не выделяя дополнительный массив и не заводя второй файл заменить каждое число его произведением на некоторое число, использую при этом процедуру Seek, чтобы установить позицию записи/считывания на конкретное место в файле?

Лично у меня подобным образом прокатывало, но у меня правда был типизированный файл записей (File of rec, где rec - записи).
Я так же устанавливал сиком позицию в необходимое место и менял поле у записи, не заводя дополнительную переменную типа запись и не создавая второй файл.
Вадим Мошев вне форума Ответить с цитированием
Старый 24.09.2011, 08:25   #16
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вадим, в данном случае такой подход практически неприменим.
Дело в том, что исходный файл текстовый. Следовательно, при умножении исходного числа на 1200 изменяется количество разрядов, которое занимает полученное произведение. А, следовательно, все остальные символы нужно сдвигать на эту разницу.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.09.2011, 11:08   #17
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Цитата:
2) файлы бывают не только текстовые! В этом случает .LoadFromFile - "отдыхает"
Ошибаетесь уважаемый !
В контестке обсуждаемой темы файл текстовый, если нужен бинарный для этого есть TFileStream )))
Цитата:
3) автор темы выложил(а) файлик "ВЗУ-2 Ввод-1 мощность.txt". Он всего 10 кб. Скачайте его. И убедитесь, что предложенный Вами код - НЕ РАБОТАЕТ с этим файлом.
Опять Вы заблуждаетесь уважаемый.
Как раз такий файл, нормальные программеры Делфи читают объектом класса TStringList. Демонстрирую :
Код:
procedure TForm1.Button1Click(Sender: TObject);
var SL  : TStringList;
    i,N : integer;
   s:string;
begin
   if not FileExists('C:\ВЗУ-2 Ввод-1 мощность.txt') then exit;
  SL := TStringList.Create;
  SL.LoadFromFile('C:\ВЗУ-2 Ввод-1 мощность.txt');
  S:=Trim(SL.Text);
  SL.Text:='';
  SL.Delimiter := ',';  
  DecimalSeparator :='.';
  SL.DelimitedText:=S;
  
  for i:=0 to SL.Count-1 do
  begin
   N:=StrToIntDef(SL.Strings[i], -1);
   if N=-1 then continue;
   SL.Strings[i] := IntToStr(N*1200);
  end;
  SL.SaveToFile('C:\file.txt');
  SL.Free;
end;
П.С сколько программируете, если не секрет?
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 25.09.2011, 19:44   #18
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
SL.SaveToFile('C:\file.txt');
1) если в файле будет -1 - это число будет выкинуто. Почему такое пренебрежение к минус единице?!
2) Ваш код не будет компилироваться на Delphi < 7
(ну не было в TSTringList свойства .Delimiter) (у меня Delphi 5, если что...)

3) а ничего, что полученный файл будет отличаться от исходного?! А не знаю, откуда взялась задача, но вполне допускаю, что нужно получить файл с таким же распределением чисел в строке, как и исходном. Или Вы решили, что это неважно?

4) ну и главное.
Вы свой код проверяли?!
Предложенный Вами код исходный файл запишет по одному числу в строке БЕЗ ИЗМЕНЕНИЙ.
Т.е. умножений произведено вообще не будет ни разу!
да и странно переводить через функцию StrToIntDef вещественные числа. И при этом, что характерно, ошибок код никаких не выдаёт...
я понимаю, конечно, что это просто опечатка. Но тем не менее..

И я не понимаю, что Вы хотите доказать?
Что данную задачу можно решить через TStringList ?
Ну можно. и что?

Цитата:
П.С сколько программируете, если не секрет?
Это к делу не относится. но очень много-много лет...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.09.2011, 20:23   #19
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

StrToFloatDef - разницы нет,. изначально былос казано файл с числами.
Цитата:
что нужно получить файл
- проблема программистов по типу Вас - сами себе ставите задачи. Не зочу Вам указывать но совет Вам на будущее, задачу программисту ставит заказчик а не он сам себе.
Для того чтобы получить такой же файл можно использовать простую строку S:string;
и добавлять тупо значения S:=S+StrToFloatDef(SL.Strings[i], 0)*1400+SL.Delimiter;
-----
А если по сути, то Вам как модератору стояло бы сообщить, чтобы каждый пользователь, хотя бы в подписи, указывал каким Делфи он пользуется (версию) тогда бы и не было непонятных динозавроподобных AssignFile и моих TStringList ))
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 25.09.2011, 21:17   #20
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Как же я устал с Вами спорить...


Цитата:
Для того чтобы получить такой же файл можно использовать простую строку S:string;
да не получите Вы такую же строку. НЕ ПОЛУЧИТЕ!
Потому что Вы исходный файл не качали и не смотрели.
А там в файле 31 одна строка с числами (не считая пустых строк), в каждой строке с числами ровно 49 вещественных чисел.
Вы же информацию о том, какие числа в какой строке были уже УТРАТИЛИ в своём примере кода!

про такие мелочи как добавления числа к строке мы умолчим, понятно, что для этого можно использовать FloatToStr или Format() (последний много лучше, т.к. можно задать маску выводимых чисел).


Цитата:
непонятных динозавроподобных AssignFile
понятно. Вам они непонятны в силу того, что Вы ими никогда не пользовались (и TurboPascal в глаза никогда не видели),
вот Вы и "взъелись" на простое нормальное (классическое) решение... Так ведь?!

Цитата:
задачу программисту ставит заказчик а не он сам себе.
А вот с этим согласен!
И раз автор темы (он же "заказчик") больше в теме не появлялась, значит либо её удовлетворило решение, либо она решила задачу по другому (в Excel, например), либо необходимость в задаче уже отпала...
впрочем, в любом случае, продолжать нашу дисскуссию не вижу смысла. Доказать друг другу мы ничего не сможем, а впустую сотрясать воздух примерами кода и доказательствами своей правоты - бессмыслено. Впрочем, это я высказал исключительно своё мнение, ИМХО...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание txt файла (Sandr) C/C++ Сетевое программирование 11 21.12.2010 23:04
Как скопировать текст с файла 1.txt и записать в 2.txt Kasper1 Общие вопросы по Java, Java SE, Kotlin 1 14.12.2010 05:56
Delphi Извлечение данных из файла txt ledenec Помощь студентам 2 07.04.2010 18:19
Повторное открытие файла txt для редактирования в delphi Shaggrath Помощь студентам 8 20.07.2009 13:36
как запретить изменение текстового файла на delphi BuT@JL Помощь студентам 1 28.02.2009 05:35