• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Cчитать файл

SoBadDay

Ученик
Регистрация
18 Авг 2019
Сообщения
1
Реакции
0
Баллы
0
Cчитать файл

Имеется текстовый файл, в котором символы могут быть расположены как угодно. Количество строк/символов не ограничено. Нужно скопировать данный текст в строку.
Помогите пожалуйста.
 
Количество строк/символов не ограничено
Сколько угодно символов в одну строковую переменную не уместится, там ограничение по количеству символов, не более 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 компоненты в указанные переменные. Тип файловых компонент и переменных должны совпадать
 
Сколько угодно символов в одну строковую переменную не уместится, там ограничение по количеству символов, не более 256.
Лёш, сейчас это не совсем так: есть современные варианты Паскаля, допускающие длинные строки. Естественно, ТС традиционно не соблаговолил указать реализацию среды, в которой нужно решить задачу.
Тут другое интересно.
Ладно, ограничимся 256-ю символами, не суть. А вот как перегнать файл в строку, обойдя служебные символы конца строки (заменив их пробелами), и можно ли это в принципе? Вчера весь вечер пытался — не сумел. Стыдно чертовски, прям под землю провалиться! Есть идеи?
 
Команда ветвления вам в помощь, конец строки EOLn он же CHR(13), конец файла EOF :)
 
Команда ветвления вам в помощь, конец строки EOL он же CHR(13), конец файла EOF
Лёш, ну право... А то я не пытался! Либо не срабатывает, либо программа идёт в разнос (между прочим, не EoL, а EoLn). Ч-черт, с указателями, что ли, заводиться?
 
Во зар-раза, нашёл-таки способ!
Код:
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.webp
Строка:
AA01.webp
 
Идея такая:
Заводим цикл с условием выхода Not(Eof);
Читаем строку командой ReadLN(f,s);
Посимвольно записываем эту строку в результирующий файл.
Тем самым избавляемся от проблемы обработки символа конца строки.


ПыСы: почти что то же самое в вашем решении, опоздал я маленько :)
 
Вот! Решили офигенную задачу. В два выдающихся ума!
 
Да я и не пытался, куда уж мне :))
 
Назад
Сверху