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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2013, 18:08   #1
AlexP777
Пользователь
 
Регистрация: 18.10.2011
Сообщений: 33
По умолчанию работа со строками - удалить второе слово

задание
Цитата:
В заданной строке символов, состоящей из слов, разделенных пробелами удалить второе слово.
с одной строкой работает отлично(вводим с клавы)
Код:
program lab8var10;
var s: string;
    i,nn,d: integer;
 
begin
write('vvedite stroku: ');
readln(s);
nn:=pos(' ',s)+1;
i:=nn;
while s[i]<>' ' do
      inc(i);
d:=i-nn;
delete(s,nn,d);
write('Result: ',s);
readln;
end.
но с многострочным файлом нет(например, 4 строки)
Код:
program lab8var10;
var f1,f2:text;
    s: string;
    i,nn,d: integer;
 
begin
assign(f1,'D:\1.txt');
assign(f2,'D:\2.txt');
reset(f1);
rewrite(f2);

while not eof(f1) do
begin
read(f1,s);
nn:=pos(' ',s)+1;
i:=nn;
while s[i]<>' ' do
      inc(i);
d:=i-nn;
delete(s,nn,d);
write(f2,s);
end;
close(f1);
close(f2)
end.
говорит ошибка в Program1.pas(18) : Ошибка времени выполнения: Индекс выходит за ганицы массива т.е. в строке while s[i]<>' ' do и становится в ее начало курсор.

пытался заключить в операторные скобки, но результата не дало.
AlexP777 вне форума Ответить с цитированием
Старый 23.05.2013, 18:13   #2
AlexP777
Пользователь
 
Регистрация: 18.10.2011
Сообщений: 33
По умолчанию

ошибка появляется, когда ставлю запись результата в файл
write(f2,s); если поставить просто вывод на экран, то работает норм.
AlexP777 вне форума Ответить с цитированием
Старый 23.05.2013, 18:15   #3
AlexP777
Пользователь
 
Регистрация: 18.10.2011
Сообщений: 33
По умолчанию

в течении файла 1 с данными надо было писать не read, а readln т.к. файл многострочный

вот рабочий вариант, вдруг кому надо

Код:
program lab9var10;
var f1,f2:text;
    s: string;
    i,nn,d: integer;
 
begin
assign(f1,'D:\1.txt');
assign(f2,'D:\2.txt');
reset(f1);
rewrite(f2);

while not eof(f1) do
begin
readln(f1,s);
nn:=pos(' ',s)+1;
i:=nn;
while s[i]<>' ' do
      inc(i);
d:=i-nn;
delete(s,nn,d);
writeln(f2,s);
end;
close(f1);
close(f2)
end.
AlexP777 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ Вывести на экран второе слово ILYA1991 Общие вопросы C/C++ 2 27.01.2013 17:24
Даны два слова. Получить третье слово из неповторяющихся символов, входящих как в первое, так и во второе слова. dlinkz Паскаль, Turbo Pascal, PascalABC.NET 8 01.02.2012 11:09
Паскаль. Работа со строками - удалить из строки текст, размещенный в круглых скобках alex0892home Помощь студентам 3 22.04.2011 17:19
VBA_макрос: удалить всю строку в таблице, если в ней есть слово "удалить" макарошка Microsoft Office Excel 15 05.10.2010 09:09
Помогите решить. Паскаль. Работа со строками. Удалить лишние пробелы. Комильфо Помощь студентам 3 10.11.2007 21:42