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


Ответ
 
Опции темы Опции просмотра
Старый 13.02.2011, 18:10   #11 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Так, ну вот пожалуйста: один из возможных вариантов решения Вашей задачки. Вводите слово. Если строка исходного файла f содержит это слово (даже без пробелов, т.е. если просто встречается такая последовательность символов) - то строка отправляется в файл f2, а если не содержит - в файл f1. Таким образом, в файле f1 оказываются строки файла f, НЕ содержащие слово, а в файле f2 - содержащие:
Код:
VAR
 f,f1,f2:Text;
 S,Sx,Sy:String;
 i:Integer;
 b:boolean;
BEGIN
 Assign(f,'tst_in.txt');
 ReSet(f);
 Assign(f1,'tst_out1.txt');
 ReWrite(f1);
 Assign(f2,'tst_out2.txt');
 ReWrite(f2);
 WriteLn('Enter the word:');
 ReadLn(Sx);
 REPEAT
  ReadLn(f,S);
  b:=false;
  for i:=1 to Length(S)-Length(Sx) do
   if S[i]=Sx[1] then
    begin
     Sy:=Copy(S,i,Length(Sx));
     if Sx=Sy then b:=true;
    end;
  If b then
   WriteLn(f2,S)
  else
   WriteLn(f1,S);
 UNTIL EoF(f);
 Close(f);
 Close(f1);
 Close(f2);
END.
Vladimir_S вне форума   Ответить с цитированием

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

Зачастую проблемы у людей очень похожие, обратите внимание на это

Редактирование документа в фотошопе
Редактирование InstallShield Wizard
Считывание текстового файла команда: Windows Type
Редактирование снимков с мобильного (2megapixels) в Photoshop CS3

Старый 13.02.2011, 19:14   #12 (permalink)
Hayeng
Member
 
Регистрация: 13.02.2011
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Получилось так:
program z1;
uses crt;
var f,f1:text;
s: string;
begin
assign (f, 'D:\Text1.txt');
reset(f);
assign (f1, 'D:\Text2.txt');
rewrite (f1);
while not eof (f) do
begin readln (f,s);
if (s[1]='слово') then
writeln(f1,s);
end;
Close(f);
close(f1);
end.
Программа ошибок не выдает, второй текстовый файл создает, но строки не переносит.
Что может быть не так?
Hayeng вне форума   Ответить с цитированием
Старый 13.02.2011, 19:16   #13 (permalink)
Hayeng
Member
 
Регистрация: 13.02.2011
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Ой, спасибо огромное!
На мою позорную прогу не смотрите...
Hayeng вне форума   Ответить с цитированием
Старый 13.02.2011, 19:28   #14 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Hayeng Посмотреть сообщение
Получилось так:
program z1;
uses crt;
var f,f1:text;
s: string;
begin
assign (f, 'D:\Text1.txt');
reset(f);
assign (f1, 'D:\Text2.txt');
rewrite (f1);
while not eof (f) do
begin readln (f,s);
if (s[1]='слово') then
writeln(f1,s);
end;
Close(f);
close(f1);
end.
Программа ошибок не выдает, второй текстовый файл создает, но строки не переносит.
Что может быть не так?
Много чего "не так".
Прежде всего, позвольте полюбопытствовать - а чем Вас предложенный мною вариант не устраивает? Уж он-то ошибок не содержит. Проверено, естественно.
Ну ладно, хотите по-своему - пожалуйста.
1. Ошибка здесь: if (s[1]='слово') then . Дело в том, что s[1] означает ПЕРВЫЙ СИМВОЛ строки s (например, если s='Hayeng', то s[1]='H'), и Вы пытаетесь этот первый символ сравнить с некоей строковой переменной 'слово'. Естественно, результат подобного сравнения будет всегда отрицательным.
2. Даже если Вы уберете [1], т.е. оставите if (s='слово') then , то получите решение не исходной, а сильно упрощенной задачи. В этом случае программа будет реагировать не на строки, СОДЕРЖАЩИЕ 'слово', а на строки, ЦЕЛИКОМ представляющие собой 'слово' и не содержащие ни одного другого символа.

Советую всё же попробовать разобраться с моим кодом - он содержит исчерпывающее решение задачи. Впрочем, дело Ваше.
Vladimir_S вне форума   Ответить с цитированием
Старый 13.02.2011, 19:32   #15 (permalink)
Hayeng
Member
 
Регистрация: 13.02.2011
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Понятно, не все так просто.
За предложенный Вами вариант большое-пребольшое спасибо. Я увлеклась написанием своего "чуда" и не сразу заметила Ваше сообщение с программой )))
Hayeng вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 13.02.2011, 19:33   #16 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Hayeng Посмотреть сообщение
Ой, спасибо огромное!
На мою позорную прогу не смотрите...
Да чего уж сразу "позорную"? Несколько, конечно, сыровато, но в принципе структура правильная.
Vladimir_S вне форума   Ответить с цитированием
Старый 13.02.2011, 19:36   #17 (permalink)
Hayeng
Member
 
Регистрация: 13.02.2011
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Потому что программы не писала лет 7, а тут вот необходимость возникла. Тонкостей уже конечно не помню всех, потому и позорная )))
Hayeng вне форума   Ответить с цитированием
Старый 14.02.2011, 22:18   #18 (permalink)
Hayeng
Member
 
Регистрация: 13.02.2011
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Подскажите пожалуйста, а если длина строки более 255 символов, можно ли заменить чем-нибудь string? Или нужно вводить массив?
Pchar не хочет работать с командой Readln.
Hayeng вне форума   Ответить с цитированием
Старый 14.02.2011, 22:56   #19 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Hayeng Посмотреть сообщение
Подскажите пожалуйста, а если длина строки более 255 символов, можно ли заменить чем-нибудь string? Или нужно вводить массив?
Pchar не хочет работать с командой Readln.
Ну вот и здрасьте - пошло-поехало! Pchar-то откуда вылез? Или Вам в Delphi программа нужна? Да еще с указателями непременно? Ну тогда это задача совсем другого уровня, которую решать надо совсем иначе.
Заменить-то String на Array of Char в принципе можно, только вот как быть с командой Copy? Даже и не знаю.
А откуда взялись строки с длиной больше 255 символов? ЧуднО...
Vladimir_S вне форума   Ответить с цитированием
Старый 14.02.2011, 23:04   #20 (permalink)
Hayeng
Member
 
Регистрация: 13.02.2011
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Строки в текстовом файле оказались длиннее 255 символов. И поэтому программа все, что больше 255 символов в строке не воспринимала, и выборка была неполной. Не знаю вобщем, что делать.
А про Pchar вычитала в учебнике, еще был какой-то Antistring непонятный...
Hayeng вне форума   Ответить с цитированием
Ads

Яндекс

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


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

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




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

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