Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 18.08.2019, 17:55   #1 (permalink)
SoBadDay
Новичок
 
Регистрация: 18.08.2019
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Cчитать файл

Имеется текстовый файл, в котором символы могут быть расположены как угодно. Количество строк/символов не ограничено. Нужно скопировать данный текст в строку.
Помогите пожалуйста.
SoBadDay вне форума   Ответить с цитированием

Старый 18.08.2019, 17:55
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Эти ссылки помогут вам в решении проблемы

Скачиваю файл с Интернета (любого браузера), файл данный автоматически сразу удаляетс
Как скачать от сюда MP3 файл? Хочу скчать 5-ый сверху файл.
Pascal ABC: File23. Дан файл вещественных чисел, создать файл целых чисел
Скачала торрент файл - Office 2003 (файл ISO). Потом скачала UltraISO Portabile.
Скачала торрент файл - Office 2003 (файл ISO).

Старый 19.08.2019, 08:20   #2 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,486
Записей в дневнике: 64
Сказал(а) спасибо: 148
Поблагодарили 182 раз(а) в 78 сообщениях
Репутация: 71464
По умолчанию

Цитата:
Сообщение от SoBadDay Посмотреть сообщение
Количество строк/символов не ограничено
Сколько угодно символов в одну строковую переменную не уместится, там ограничение по количеству символов, не более 256. Задачу можно решить при помощи дополнительного результирующего файла.
Вот вам некоторые команды в помощь:
Цитата:
Создание файла
Assign(<имя файловой переменной>, <имя файла>)
Процедура Assign связывает переменную файлового типа с физическим файлом. Например, установить соответствие между переменной Fil и текстовым файлом lot, расположенном на диске D, можно так:
Assign(Fil, ‘D:\lot.txt’)
Режим чтения
Reset(<имя файловой переменной>)
Процедура Reset открывает файл в режиме чтения, после чего оператором Read(<файловая переменная>, <считываемый элемент>) можно осуществить последовательное считывание элементов в программу.
Конец файла
ЕOF(<имя файловой переменной>)
Количество элементов в файле заранее не определяется, но часто необходимо знать о моменте достижения конца файла. Для этого в Паскале существует логическая функция EOF, которая проверяет достигнут ли конец, и если это так, то принимает значение True, иначе – False. Осуществляется проверка, как правило, в цикле, в качестве условного выражения выступает функция EOF.
Режим записи
Rewrite(<имя файловой переменной>)
Открыв файл в режиме записи, можно поэлементно записать в него информацию, воспользовавшись процедурой Write(<файловая переменная>, <элемент>).
Закрытие файла
Close(<имя файловой переменной>)
Процедура Close закрывает открытый файл, а также освобождает файловую переменную, указанную в качестве параметра.
Запись в файл:
Write(f, список переменных); Процедура записывает в файл f всю информацию из списка переменных.
Чтение из файла:
Read(f, список переменных); Процедура читает из файла f компоненты в указанные переменные. Тип файловых компонент и переменных должны совпадать
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 19.08.2019, 08:29   #3 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,761
Сказал(а) спасибо: 339
Поблагодарили 579 раз(а) в 207 сообщениях
Репутация: 112176
По умолчанию

Цитата:
Сообщение от AlexZir Посмотреть сообщение
Сколько угодно символов в одну строковую переменную не уместится, там ограничение по количеству символов, не более 256.
Лёш, сейчас это не совсем так: есть современные варианты Паскаля, допускающие длинные строки. Естественно, ТС традиционно не соблаговолил указать реализацию среды, в которой нужно решить задачу.
Тут другое интересно.
Ладно, ограничимся 256-ю символами, не суть. А вот как перегнать файл в строку, обойдя служебные символы конца строки (заменив их пробелами), и можно ли это в принципе? Вчера весь вечер пытался — не сумел. Стыдно чертовски, прям под землю провалиться! Есть идеи?
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S на форуме   Ответить с цитированием
Старый 19.08.2019, 08:50   #4 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,486
Записей в дневнике: 64
Сказал(а) спасибо: 148
Поблагодарили 182 раз(а) в 78 сообщениях
Репутация: 71464
По умолчанию

Команда ветвления вам в помощь, конец строки EOLn он же CHR(13), конец файла EOF
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 19.08.2019, 08:56   #5 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,761
Сказал(а) спасибо: 339
Поблагодарили 579 раз(а) в 207 сообщениях
Репутация: 112176
По умолчанию

Цитата:
Сообщение от AlexZir Посмотреть сообщение
Команда ветвления вам в помощь, конец строки EOL он же CHR(13), конец файла EOF
Лёш, ну право... А то я не пытался! Либо не срабатывает, либо программа идёт в разнос (между прочим, не EoL, а EoLn). Ч-черт, с указателями, что ли, заводиться?
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S на форуме   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 19.08.2019, 10:24   #6 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,761
Сказал(а) спасибо: 339
Поблагодарили 579 раз(а) в 207 сообщениях
Репутация: 112176
По умолчанию

Во зар-раза, нашёл-таки способ!
Код:
Var
 f:Text;
 S,S1:String;
 i:Integer;

Begin
 Assign(f,'ttt.txt');
 Reset(f);
 S:='';
 Repeat
  Readln(f,S1);
  for i:=1 to Length(S1) do S:=S+S1[i];
  if Not(EoF(f)) then S:=S+' ';
 Until EoF(f);
 Close(f);
 Writeln(S);
 ReadLn
End.
Исходный файл:
nc01.jpg
Строка:
aa01.jpg
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S на форуме   Ответить с цитированием
Старый 19.08.2019, 10:28   #7 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,486
Записей в дневнике: 64
Сказал(а) спасибо: 148
Поблагодарили 182 раз(а) в 78 сообщениях
Репутация: 71464
По умолчанию

Идея такая:
Заводим цикл с условием выхода Not(Eof);
Читаем строку командой ReadLN(f,s);
Посимвольно записываем эту строку в результирующий файл.
Тем самым избавляемся от проблемы обработки символа конца строки.


ПыСы: почти что то же самое в вашем решении, опоздал я маленько
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 19.08.2019, 10:31   #8 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,761
Сказал(а) спасибо: 339
Поблагодарили 579 раз(а) в 207 сообщениях
Репутация: 112176
По умолчанию

Вот! Решили офигенную задачу. В два выдающихся ума!
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S на форуме   Ответить с цитированием
Старый 19.08.2019, 10:32   #9 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,486
Записей в дневнике: 64
Сказал(а) спасибо: 148
Поблагодарили 182 раз(а) в 78 сообщениях
Репутация: 71464
По умолчанию

Да я и не пытался, куда уж мне
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 15:24.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.