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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2016, 18:28   #1
Xchel
Пользователь
 
Регистрация: 24.03.2016
Сообщений: 13
По умолчанию Паскаль. Как в этой программе поменять способ ввода текста?

Есть программа на тему стеганографии, то есть есть два файла - куда надо прятать текст и файл, где будет результат. Одна проблема - никак не соображу как поменять способ ввода текста, который надо спрятать. В данной программе он вводится с клавиатуры, а как сделать так, чтобы он брался из файла?

Сама программа:

Код:
const
  fNameIn = 'stihi.txt'; {имя файл из которого будет браться отвлекающая информация}
  fNameOut = 'stihi_co.txt'; {имя файл в который будет сохраняться закодированная информация}
var
  fIn, fOut : text;
  i, j, cnt : integer;
  OneSymbol : byte;
  sIn, s, sOne : string;
  choice : integer;
begin
  WriteLn('Стенография. Программа кодирования-декодирования. v1.0 (c) 2012');
  WriteLn;

  Assign(fIn, fNameIn);
  Assign(fOut, fNameOut);

  repeat
    WriteLn('Введите, что Вы хотите сделать (число): 0-выйти из программы, 1-кодировать сообщение, 2-декодировать.');
    Readln(choice);
  until (choice>=0) and (choice<=2);

  case choice of
    0: WriteLn('Окончание работы по запросу оператора.');
    1: begin
          WriteLn('Выбран режим кодирования');
          WriteLn('Введите строку для кодирования: ');
          Readln(sIn);
          WriteLn('Обработка файла ', fNameIn,
            ' результат будет помещён в файл ', fNameOut);

          Reset(fIn);
          {сначала проверим, что количество строк в исходном файле достаточно для кодирования}
          cnt:=0;
          while (cnt<=(Length(sIn)*8)) and (Not EOF(fIn)) do
          begin
            Readln(fIn);
            inc(cnt);
          end;
          Close(fIn);

          if cnt<=(Length(sIn)*8) then begin
            WriteLn('Недосточно строк в исходной файле!');
            WriteLn('Обнаружено ',cnt,' строк, а необходимо не менее ', 1+Length(sIn)*8);
          end
          else begin
            Reset(fIn);
            Rewrite(fOut);
            for i:=1 to Length(sIn) do begin
              OneSymbol := ord(sIn[i]);
              for j:=1 to 8 do begin
                ReadLn(fIn, s);

                {удалим все пробелы в конце строки}
                while ( Length(s)>0 ) and (s[Length(s)]=' ') do Delete(s,Length(s),1);

                {если крайний бить = 1 - то добавим в конец строки пробел}
                if (OneSymbol and 1) = 1 then s:= s+' ';

                WriteLn(fOut, s);

                {сдвинем байт символа вправо - чтобы в следующей итерации обработать следующий бит}
                OneSymbol := OneSymbol shr 1;

              end;
            end;
            ReadLn(fIn, s);
            {удалим все пробелы в конце строки}
            while ( Length(s)>0 ) and (s[Length(s)]=' ') do Delete(s,Length(s),1);

            {запишем в конец строки ДВА пробела - это признак окончания стеганотекста в обычном тексте}
            s:= s+'  ';
            WriteLn(fOut, s);

            {теперь просто скопируем всё, что осталось из первого файла во второй - допишем остаток файла}
            while Not EOF(FIn) do begin
              ReadLn(fIn, s);
              WriteLn(fOut, s);
            end;

            {закроем файлы}
            Close(fOut);
            Close(fIn);

            WriteLn('Процесс кодирования успешно завершён.');

          end;



       end;

    2: begin
        WriteLn('Выбран режим декодирования. Декодируется информация из файла ',fNameOut);

        sIn := '';  {строка, куда будем собирать декодированные байты. вначале пустая!}

        Reset(fOut);
        i:= 0;
        OneSymbol := 0;

        while Not EOF(FOut) do begin
           Readln(fOut, s);
           if Length(s)>=2 then
               {если в конце строки ДВА пробела - то всё, конец декодирования.
                обнаружен признак завершения стеганотекста}
             if copy(s,Length(s)-1,2)='  '
               then Break;
           inc(i);
           if (Length(s)>0) and (Copy(s, Length(s),1)=' ') then OneSymbol := OneSymbol or $80;
           if i=8 then begin
             sIn := sIn + chr(OneSymbol);
             i:=0;
             OneSymbol := 0;
           end
           else OneSymbol := OneSymbol shr 1;
        end;
        WriteLn('Обнаруженный скрытый текст: ', sIn);
        WriteLn;

        WriteLn('Процесс декодирования успешно завершён.');

       end;
  end;

  Readln; {ожидание нажатия Enter для закрытия окна программы...}
end.


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 27.03.2016 в 12:40.
Xchel вне форума Ответить с цитированием
Старый 24.03.2016, 23:21   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,310
По умолчанию

Просто создай текстовый файл с нужной строкой.
Открываешь файл на чтение и читаешь его в sIn.
Код:
var 
   ...
   fh: text;

...
assign(fh, 'имя нового файла');
reset(fh);
Readln(fh, sIn);
...

Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 25.03.2016, 16:18   #3
Xchel
Пользователь
 
Регистрация: 24.03.2016
Сообщений: 13
По умолчанию

Спасибо большое, очень помогли)
Xchel вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как в этой программе использовать меню через метки Danteeee Помощь студентам 5 26.11.2014 19:12
как составить блок-схему к этой программе??? owert Паскаль, Turbo Pascal, PascalABC.NET 1 05.06.2013 17:25
Приветы, не могу составить блок-схему к этой программе, не понимаю как работает? Пиф Общие вопросы C/C++ 1 10.03.2013 07:57
Проверьте работает ли у вас звук в Паскаль в этой программе!! messiman Помощь студентам 1 21.01.2013 13:58
как подключить к основной программе файл с частью этой программы??? program2001 Паскаль, Turbo Pascal, PascalABC.NET 4 17.06.2011 15:09