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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2013, 21:16   #1
Liinad
Пользователь
 
Регистрация: 09.11.2012
Сообщений: 29
Печаль Pascal. Выделение слов в текстовых файлах

Создать текстовый файл. Слова в рядках могут разделятся пробелами или запятыми. Необходимо вывести исходный и полученный в процессе выполнения программы файлы. Во всех словах, которые состоят только из маленьких латинских букв, заменить их на прописные. (если встречается такое слово : "ТрОн", к примеру, то мы его не трогаем, выводим сразу! А если слово "трон", только с маленьких, то его перевести нужно в верхний регистр. Всю строчку вывести в новом файле).
Помогите кто-то, столько раз писал не получается

Вот код для примера То что я смог сделать.
В нем много ошибок, так как от безвыходности, пытался сделать разными способами.

Очень нужно сделать эту программу

Код:
const
     B = ['A'..'Z'];
     A = ['А'..'Я'];
var
   f,p : text;
   sim : char;
   st,sl: string;
   i,c,d,j :integer;
   pr : boolean;
begin
     assign(f,'test.pas');
     assign(p,'itog.pas');
     reset(f);
     writeln('   Исходный файл : ');
     while not eof(f) do
          begin
               readln(f,st);
               write(st);
               writeln;
          end;
          rewrite(p);
          reset(f);
     while not eof(f) do
          begin
               readln(f,st);
               i:=1;
               while i<=length(st) do
                    begin
                         while (st[i]=' ') and (i<=length(st)) do
                              inc(i);
                              c:=i;
                         while (st[i]<>' ') and (i<=length(st)) do
                              inc(i);
                              sl:=copy(st,c,i-c);
                              d:=length(sl);
                              pr:=true;
                              for j:=1 to length(sl) do
                                 if sl[j] in A then
                                   pr:=false;
                                   sim:=upcase(sim);
                    end;
          end;
     writeln('   Полученный файл : ');
     reset(p);
     while not eof(p) do
          begin
               readln(p,st);
               writeln(st);
          end;
     close(f);
     close(p);
end.

Последний раз редактировалось Liinad; 13.04.2013 в 21:19.
Liinad вне форума Ответить с цитированием
Старый 13.04.2013, 22:18   #2
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Подправил для латиницы
Код:
const
     B = ['A'..'Z'];
     A = ['А'..'Я'];
var
   f,p : text;
   sim : char;
   st,sl,tmp: string;
   i,c,d,j :integer;
   pr : boolean;
begin
     assign(f,'C:\test.pas');
     assign(p,'C:\itog.pas');
     reset(f);
     writeln('   Исходный файл : ');
     while not eof(f) do
          begin
               readln(f,st);
               write(st);
               writeln;
          end;
          rewrite(p);
          reset(f);
          i:=1;
     while not eof(f) do
          begin
               readln(f,st);
               if i<>1 then
                 writeln(P);
               i:=1;
               while i<=length(st) do
                    begin
                         while (st[i]=' ') and (i<=length(st)) do
                              inc(i);
                              c:=i;
                         while (st[i]<>' ') and (i<=length(st)) do
                              inc(i);
                              sl:=copy(st,c,i-c);
                              d:=length(sl);
                              pr:=true;
                              for j:=1 to length(sl) do
                                 if sl[j] in B then  // проверяю B вместо A
                                 begin
                                   pr:=false;
                                   break;
                                 end;
                             if pr then
                               begin
                                 tmp:='';
                                 tmp:=sl;
                                 sl:='';
                                 for j:=1 to length(tmp)do
                                   begin
                                     sl:=sl+upcase(tmp[j]);
                                   end;
                               end;
                               write(P,sl+' ');
                    end;
          end;
     writeln('   Полученный файл : ');
     reset(p);
     while not eof(p) do
          begin
               readln(p,st);
               writeln(st);
          end;
     close(f);
     close(p);
  readln
end.
Тестировал на таком файле:
Цитата:
Сообщение от test.pas
duck DSAFL asdaS
asdS fadFA adsFDFSasd asd
afasf asfsafSA asfasfa as

asdasd ASD asd

rwew
Все работает:
Цитата:
DUCK DSAFL asdaS
asdS fadFA adsFDFSasd ASD
AFASF asfsafSA ASFASFA AS

ASDASD ASD ASD

RWEW
А для кирилицы достаточно сложно из-за кодировок. Чисто теоритически можно побаловаться с ord и char, но я понятия не имею, как в этом случае себя будет вести upcase.
Все тривиальное просто

Последний раз редактировалось whatever; 13.04.2013 в 22:22.
whatever вне форума Ответить с цитированием
Старый 13.04.2013, 22:25   #3
Вадим Мошев

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

Цитата:
A = ['А'..'Я'];
Имхо, нельзя так задавать множество русских букв. Там содержится разрыв. В результате на ряду с русскими буквами там ещё будут и другие символы.
Вадим Мошев вне форума Ответить с цитированием
Старый 13.04.2013, 22:31   #4
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
Имхо, нельзя так задавать множество русских букв. Там содержится разрыв. В результате на ряду с русскими буквами там ещё будут и другие символы.
Это меньшая из проблем. Дэлфи не работает с кирилицей, поэтому нужно через CharToOEMBuff и OEMToCharBuff, да поверх всего этого сохранять в файл и читать из него.

В паскале та же фигня, сам он кирилицу понимает, но сохраняя в документ *.pas жутко ее коверкает. Возможно эту проблему можно вешить сохранением в *.txt и только тогда разбираться с множеством нашего алфавита. Я бы просто прописал вручную от А до Я и не забивал голову.
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 14.04.2013, 14:11   #5
Liinad
Пользователь
 
Регистрация: 09.11.2012
Сообщений: 29
По умолчанию

Огромное спасибо за код, все работает)
Liinad вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Комментирование в текстовых файлах stalker1995s Общие вопросы Delphi 9 14.04.2013 21:51
Паскаль, сортировка в текстовых файлах. Monori Помощь студентам 4 11.04.2012 17:59
Сравнение данных в текстовых файлах zhukovms Помощь студентам 34 05.09.2011 11:58
Поиск и замена в текстовых файлах akm-gala Помощь студентам 1 18.06.2010 09:08
Выделение слов из строки // Pascal Rifler Паскаль, Turbo Pascal, PascalABC.NET 4 02.07.2008 08:22