В общем смысл задачи такой. Имеется текст из русских, английских букв, чисел, знаков препинания и пробелов. Русские слова это любые последовательности только из русских букв,английские аналогично. Все русские слова необходимо переместить в один текстовый файл, английские в другой. Числа, знаки препинания и пробелы переносить не надо.
Вот пример как должна работать прога:
Текст 1. Стекло в 1345 year ьвап' мебель rhtr 53463'' ' hjnроим4пhff4hg65
Текст 2(русский) Стекловьвапмебель
Текст 2(English) yearrhtr
Если кому не влом, помогите плиз!
volvo
29.12.2007 23:04
Разбиваешь строку на слова и проверяешь, состоит ли слово только из символов кириллицы (тогда его в один файл), или только из латиницы (значит, в другой файл)... Если есть что-то еще - то не записывать никуда...
мисс_граффити
30.12.2007 0:12
не совсем понятно: ьвап' состоит не только из русских букв, однако мы ту часть, которая есть русские буквы, переносим а из hjnроим4пhff4hg65 мы проимп не выделяем.
andriano
30.12.2007 1:14
Действительно. Даже если ввести уточнение: не "русские буквы", а "символы, используемые в русском языке", все равно в ответе фгурировать должно "Стекловьвап'мебель", а не "Стекловьвапмебель".
volvo
30.12.2007 1:32
А если ввести уточнение, что слова разделяются НЕ только пробелами, а еще и другими разделителями (причем разделителей может быть больше одного)? Кто сказал, что ' не может быть разделителем?
andriano
30.12.2007 1:54
Вопрос в другом - кто сказал, что может? По условию вообще нет такого понятия как разделитель. Следовательно, словом следует считать ЛЮБУЮ последовательность русских букв, встреченных в тексте. В том числе и из одного символа. Откуда следует уточненный алгоритм: все русские буквы помещаем в один файл, английские - в другой, а все остальное - игнорируем. Кто вообще придумал выделять из текста слова? Если в выходные файлы их предполагается помещать без разделителей, то это совершенно излишне.
volvo
30.12.2007 2:24
Цитата
Кто вообще придумал выделять из текста слова?
Собственно, я придумал. А что, у тебя с этим какие-то проблемы? Ты здесь вообще каким боком решаешь, что автору подойдет, а что - нет? Или ты - его личный адвокат и представитель?
Твои ОБЩИЕ слова в КАЖДОЙ теме порядком поднадоели, знаешь? Я тоже могу ВЕЗДЕ писать "Что сделал сам?" и говорить, что то что предлагают другие - НЕ НУЖНО, не предлагая ничего взамен... И придираться к словам я тоже умею, теперь у тебя будет шанс в этом убедиться
P.S.
Цитата
Откуда следует уточненный алгоритм: все русские буквы помещаем в один файл, английские - в другой, а все остальное - игнорируем.
Угу... Как же...
Цитата(Автор)
Текст 1. Стеклов 1345 year ьвап' мебель rhtr 53463'' ' hjnроим4пhff4hg65
Текст 2(русский) Стекловьвапмебель
ВСЕ русские буквы присутствуют в Текст 2, правда... Ах, ну да... andriano же так удобнее, естественно надо сделать, как ОН сказал, а не как просит автор...
andriano
30.12.2007 2:55
Цитата(volvo @ 29.12.2007 22:24)
Собственно, я придумал. А что, у тебя с этим какие-то проблемы? Ты здесь вообще каким боком решаешь, что автору подойдет, а что - нет? Или ты - его личный адвокат и представитель?
Я не решаю. Я просто умею читать и делюсь своими впечатлениями от прочитанного.
Цитата
Твои ОБЩИЕ слова в КАЖДОЙ теме порядком поднадоели, знаешь? Я тоже могу ВЕЗДЕ писать "Что сделал сам?" и говорить, что то что предлагают другие - НЕ НУЖНО, не предлагая ничего взамен... И придираться к словам я тоже умею, теперь у тебя будет шанс в этом убедиться
"Общие слова", говоришь? "Ничего не предлагая?
Цитата
P.S. Угу... Как же...
Вот этот твой комментарий относится КАК РАЗ к одному из моих КОНКРЕТНЫХ предложений. Нехорошо в одном и том же сообщении противоречить самому себе.
Цитата
ВСЕ русские буквы присутствуют в Текст 2, правда... Ах, ну да... andriano же так удобнее, естественно надо сделать, как ОН сказал, а не как просит автор...
Да, примеры ПРОТИВОРЕЧАТ опубликованному условию. Что дальше? Будем выяснять отношения между собой или будем выяснять, что автору темы нужно на самом деле?
Geophysist
3.01.2008 22:09
Да, извините, ьвап' не переносится никуда. А разделитель есть - пробел.
Айра
4.01.2008 3:41
Можно сделать так:
var s,s1: string;
f1,f2: text;
i,j: integer;
R,E: setof char;
ru,en,dr: boolean;
begin
R:=['А'..'я'];
E:=['A'..'z'];
writeln('введите строку');
readln(s);
assign(f1, 'rus.txt');
rewrite(f1);
assign(f2, 'eng.txt');
rewrite(f2);
while length(s)<>0dobegin
s1:='';
dr:=false; // наличие других символов
ru:=false; // наличие русских символов
en:=false; // наличие латинских символов
i:=Pos(' ',s);
if i>0then s1:=Copy(s,1,i-1)
else s1:=s;
for j:=1to length(s1) dobeginif s1[j] in R then ru:=true
elseif s1[j] in E then en:=true
else dr:=true;
end;
if dr=false thenbeginif ru and (not en) then write(f1, s1);
if (not ru) and en then write(f2, s1);
end;
if i>0then delete(s,1,i)
else delete(s,1,length(s));
end;
close(f1);
close(f2);
end.
Lapp
4.01.2008 9:26
Цитата(Айра @ 3.01.2008 23:41)
Можно сделать так:
Можно и так, только я бы конструкцию:
while (s[i]<>' ') and (i<=length(s)) dobegin
s1:=s1+s[i];
inc(i);
end;
- заменил бы на такую:
i:=Pos(' ',s);
if i>0then s1:=Copy(s,1,i-1) else s1:=s;
А выражение типа:
if s1[j] in R then ru:=true
- на вот такое:
ru:= ru or (s1 in R);
- хотя последнее спорно.. Но я бы делал проверку иначе, думаю..
И еще замечание: русские буквы не во всех кодировках представляют связное множество..
volvo
4.01.2008 13:54
Цитата
русские буквы не во всех кодировках представляют связное множество
С латинскими, заданными в такой форме, тоже возможны баги, кстати (между прописными и строчными буквами есть еще "посторонние" 6 символов):
s := 'start finish begin` 98989898 end';
и begin` тоже запишется в файл, хотя и не должно... Лучше все-же латиницу разбить на 2 интервала...
Айра
4.01.2008 21:37
У меня, когда в FPC работаю русские буквы вообще вот так выглядят: ЇаЁўҐв (привет)
Цитата
русские буквы не во всех кодировках представляют связное множество.. Лучше все-же латиницу разбить на 2 интервала...
Глупый вопрос: как определить, какая у меня кодировка и как в ней располагаются эти буквы? Нехочется дальше сталкиваться с такими проблемами..
to Lapp: первую конструкцию заменила (+ процедура удаления тоже несколько изменилась)..
compiler
5.01.2008 1:04
Цитата(Айра @ 4.01.2008 16:37)
и как в ней располагаются эти буквы?
самый простой способ, ИМХО, распечатать все символы в цикле с изменяющимся кодом...
for i:=0to255do
writeln(i:3, '=', chr(i));
а затем сравнить с таблицами...(особый случай , когда есть проблемы с неизвестностю кодировки терминала...) ну, или посмотреть дукументацию...
мисс_граффити
5.01.2008 1:05
Айра, сделай, например, так:
var i: integer;
beginfor i:=32to255dobeginif (i-32) mod10=0then//чтобы было по 10 символов в строке
writeln;
write(char(i), ' ');
end;
readln;
end.
ну и сами коды (i) выводи.... если именно они нужны, а не только порядок.
Айра
5.01.2008 1:22
Гы)) В двух компиляторах разные таблицы: Нажмите для просмотра прикрепленного файла Предположение: может как раз таки из-за того, что у АЗС (прикольно)) у FPC и Windows разные таблицы мне первый всегда какие-то каракули в файлы записывает?
to compiler:
Цитата
а затем сравнить с таблицами
: ссылочку не дашь?
compiler
5.01.2008 1:42
Цитата(Айра @ 4.01.2008 20:22)
to compiler: : ссылочку не дашь?
на википедию? у меня в локалке отучают ходить на википедию через инет(=>ссылку на конкретную страницу дать тяжко). зайди на нее и введи в поиске win 1251, а затем CP866 и сравни со своими таблицами...
зы насколько я знаю, кодировка задается не компилятором а средой разработки(IDE)
О!! нашла метод борьбы с каракулями: открываю файл в commander'e кнопкой F3 и выбираю ASCII (кодировка DOS) Ура!!! но все равно не очень удобно((...
compiler
5.01.2008 2:05
Цитата(Айра @ 4.01.2008 21:03)
но все равно не очень удобно((...
ИМХО, проще использовать одну среду и не "морочити собi цим голову ", как сказал Ющенко...
Айра
5.01.2008 2:15
Дык подходящая для минэ среда - це АЗС.. блин FPC, а он вредничает
compiler
5.01.2008 2:34
Цитата(Айра @ 4.01.2008 21:15)
Дык подходящая для минэ среда - це АЗС.. блин FPC, а он вредничает
тогда, можна написать программу, которая будет перехватывать функци и заниматься перекодированием... только я в этом не помошник
оффтоп >>це АЗС.. блин недавно возле меня открыли заправку FP:)
andriano
5.01.2008 15:28
Цитата(Айра @ 4.01.2008 22:15)
Дык подходящая для минэ среда - це АЗС.. блин FPC, а он вредничает
FPC - компилятор. Его можно использовать с различными средами разработки. Если предпорлагается консольная программа - использовать консольную же среду, если программа GUI, то GUI-среду. В первом случае, впрочем, возможно использование GUI-среды с установленным шрифтом TERMINAL и драйвером клавиатуры, поддерживающим 866 страницу. Иногда полезно и программное решение типа того, что приведено ниже:
..оно, если я правильно поняла, будет "перекодировать" информацию.. А как мне его правильно использовать? Я поместила его в папку, где лежат мои "творения", а в программе добавила uses recode; компилятор не ругается, но и результата нет.. я, наверно, что-то не так делаю..
andriano
5.01.2008 20:48
Ну, примерно так: вместо writeln(MyString); пишешь: writeln(RecodeString2current(MyString)); Неудобно, конечно, но может оказаться полезным, когда создаешь модуль, который планируется в дальнейшем интенсивно использовать, пичем как в GUI, так и в консоли.
Айра
5.01.2008 20:58
Цитата
вместо writeln(MyString); пишешь: writeln(RecodeString2current(MyString));
Это в коде самой программы? И так каждый раз? мдя.. неудобно..
+ сейчас проверила: не проходит компиляцию, пишет на MyString "Can't read or write variables of this type".. значит нужны еще какие-то доработки\переделки?..
мисс_граффити
5.01.2008 21:33
ну естественно... RecodeString2current - это _процедура_, а не _функция_. Результата, ассоциированного с именем, нет => чего вы хотите от writeln? Можно так попробовать:
RecodeString2current(MyString)
writeln(MyString);
Айра
5.01.2008 21:54
компилируется, но в файл все равно пишется ерунда: "Ґа Ў®в Ґв" ..опять что-то не работает.. или я не правильно делаю.. andriano?
andriano
5.01.2008 22:08
Честно говоря, я не телепат. Обращаю внимание, что в блоке инициализации присутствуют директивы условной компиляции, благодаря которым определяется, какую кодировку следует считать текущей. Для ТМТ будет работать именно этот вариант. В других компиляторах, вероятно, используются другие предопределенные константы, поэтому ту часть желательно подкорректировать под имеющийся компилятор. Если это по каким-либо причинам затруднительно, можно принудительно установить DestSet в нужное значение, не полагаясь на автоопределение. И еще: модуль, вообще говоря, предназначен для выдачи на экран. Т.е. туда, где точно известна кодировка. В случае файла же ты увидишь в нем то, что тебе покажет вьюер текстовых файлов. А показывать он будет одинаково вне зависимости от того, создан он консольной прогой или GUI-шной. Т.е. в твоем случае настраивать DestSet надо не под тип твоей проги, а под особенности используемого текстововго вьюера. А в этом варианте никакого автоопределения быть не может, а DestSet следует установить только явно из программы.
Айра
5.01.2008 22:32
Цитата
модуль, вообще говоря, предназначен для выдачи на экран
..у меня проблемы были именно с записью в txt-файл (я об этом говорила).. на экране все нормально..
Цитата
А показывать он будет одинаково вне зависимости от того
т.е. независимо от исходной кодировки.. файлы, созданные TPW выглядят нормально.. стоп.. я уже совсем запуталась и ничего не понимаю(((( ..наверно, буду пользоваться недавно открытым способом - да здравствует TC7.0 и F3
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.