IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Изменение части текстового файла
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Женский
Реальное имя: Анжелика

Репутация: -  0  +


Привет все меще раз. Ребят, подскажите, что не так? Модуль выполняет(должен выполнять) перезапись строки текстового файла, но он этого не происходит. Как это исправить?
Код

unit ex_spr;
interface
uses crt;
procedure exchange2;
implementation
var sp,temp:text;
    naz,name,pole,str1:string;
    i,k,nomst,nompl:byte;
procedure exchange2;
begin
     clrscr;
     writeln('Vvedite imya spravochnika');
     readln(name);
     assign(sp,name);
     {ASSIGN(temp,'temp.txt');}
     reset(sp);{rewrite(temp);}
     k:=0;
     writeln('Vvedite nomer izmenyaemoi stroki:');
     while not eof(sp) do
     begin
           inc(k);
           str(k,str1);
           naz:=str1+'. ';
           for i:=1 to 5 do
           begin
                readln(sp,name);
                naz:=naz+name+'   ';
           end;
           writeln(naz);NAZ:='';
     end;
     readln(nomst);
     writeln('Vvedite nomer izmenyaemogo polya');
     writeln('1-Nazvanie');
     writeln('2-Institut');
     writeln('3-Specialnost');
     writeln('4-God nabora');
     writeln('5-Kol-vo studentov v gruppe');
     readln(nompl);
     writeln('Vvedite novoe znacheniee, vibrannogo poly');
     readln(pole);
     while not eof(sp) do
     begin
           inc(k);
           IF K<> nomst*5+nompl THEN
           {begin }
                READLN(SP,NAME)
                {writeln(temp,name);
                writeln(name);}
          { end }
           ELSE
          { begin}
               WRITELN(SP,POLE);
               {writeln(pole)
           end; }
     end;
     {close(sp);close(temp);
     rewrite(sp); reset(temp);
     while not eof(temp) do
     begin
          readln(temp,name);
          writeln(sp,name)
     end;
     close(temp);
     {erase(temp); }
     close(sp);
     WRITELN('Операция завершена. Нажмите Enter для продолжения');
     readkey;
end;
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской
Реальное имя: Владимир

Репутация: -  0  +


Добавь изменение и проверь

readln(pole);
k:=0; {<-----попробуй обнулить k, иначе оно у тебя становиться больше кол-ва строк в файле}
while not eof(sp) do
begin
inc(k);
IF K<> nomst*5+nompl THEN
{begin }
READLN(SP,NAME)
{writeln(temp,name);
writeln(name);}
{ end }
ELSE
{ begin}
WRITELN(SP,POLE);
{writeln(pole)
end; }
end;
end;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Женский
Реальное имя: Анжелика

Репутация: -  0  +


Попробовала, но ниче не получается. Может есть вообще другой принципиальный подход к выполнению данной задачи?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Бывалый
***

Группа: Пользователи
Сообщений: 206
Пол: Мужской

Репутация: -  3  +


А вот здесь, поскольку файл текстовый, а не типизированный, надо действовать приблизительно так:
write('enter number of line: ');
readln(n);

reset(f1);
rewrite(f2); {== f2 - временный файл ==}

{== пишем во временный файл строки до редактируемой ==}

for i:=1 to n-1 do
begin
readln(f1,s);
writeln(f2,s);
end;

readln(f1,s);

{== редактируем строку ==}

...

{== пишем ее в файл ==}

writeln(f2, s);

{== пишем во временный файл строки после редактируемой ==}

while not EoF(f1) do
begin
readln(f1,s);
writeln(f2,s);
end;

{== тут надо удалить основной файл и переименовать временный в основной ==}

...


Но это вообще кривой подход и годится только в качестве задач для студентов. Представить себе, чтобы так работал MS Word...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Женский
Реальное имя: Анжелика

Репутация: -  0  +


О, Великие Умы Современности, помогите мне!!! Я не знала, что такую простейшую задачу так сложно осуществить в Pascal-е!!! Мне нужно сделать следующую ерунду:
Модуль, создающий текстовый файл:
Код

unit cr_spr;
interface
uses crt;
procedure creatiff;
implementation
var sp:text;
    name:string;
procedure creatiff;
begin
     clrscr;
     writeln('Vvedite imya spravochnika');
     readln(name);
     assign(sp,name);
     rewrite(sp);
     writeln('File sozdan. Dlya prodolzheniya nazhmite Enter');
     readkey;
end;
end.

Модуль, заполняющий файл:
Код

unit add_end_;
interface
uses crt;
procedure add_spr;
implementation
var sp:text;
    name,naz:string;
procedure add_spr;
begin
     clrscr;
     writeln('Vvedite imya spravochnika');
     readln(name);
     assign(sp,name);
     append(sp);
     repeat
           writeln('Vvedite nazvanie gruppi');
           readln(naz);
           writeln(sp,naz);
           writeln('Vvedite nazvanie kafedri');
           readln(naz);
           writeln(sp,naz);
           writeln('Vvedite nazvanie spechialnosti');
           readln(naz);
           writeln(sp,naz);
           writeln('Vvedite god nabora');
           readln(naz);
           writeln(sp,naz);
           writeln('Vvedite kolichestvo studentov v gruppe');
           readln(naz);
           writeln(sp,naz);
           writeln('Zakonchit vvod dannih?(Y/N)');
           readln(naz);
     until (naz = 'y')or(naz = 'Y');
     close(sp);
     readkey;
end;
end.

Модуль, изменяющий одну из записей, позиция которой вводится(самый проблемный!!!!!!)
Код

unit ex_spr;
interface
uses crt;
procedure exchange2;
implementation
var sp,temp:text;
    naz,name,pole,str1:string;
    i,k,nomst,nompl:integer;
procedure exchange2;
begin
     clrscr;
     writeln('Vvedite imya spravochnika');
     readln(str1);
     assign(sp,str1);
     ASSIGN(temp,'temp.txt');
     reset(sp);rewrite(temp);
     k:=0;
     writeln('Vvedite nomer izmenyaemoi stroki:');
     while not eof(sp) do
     begin
           inc(k);
           for i:=1 to 5 do
           begin
                readln(sp,name);
                naz:=naz+name+'   ';
           end;
           writeln(k,'. ',naz);
     end;
     readln(nomst);
     writeln('Vvedite nomer izmenyaemogo polya');
     readln(nompl);
     writeln('Vvedite novoe znacheniee, vibrannogo polya');
     readln(pole);
     while k <= (nomst*5+nompl)-1 do
     begin
          READLN(sp,name);
          writeln(temp,name);
          inc(k);
     end;
     readln(sp,name);
     writeln(temp,pole);
     while not EoF(sp) do
     begin
          readln(sp,name);
          writeln(temp,name)
     end;
     close(sp);close(temp);erase(sp);
     rename(temp,str1);
     WRITELN(‘Нажмите Enter‘);
     readkey;
end;
end.

Но все это «чудо» выдает глупость: после выполнения последнего модуля, в исходном файле оказывается лишь значение, введеное с клавиатуры в качестве нового на место заменяемого.
Что еще придумать я не знаю! Помогите мне, пожалуйста! Заранее благодарю!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Бывалый
***

Группа: Пользователи
Сообщений: 206
Пол: Мужской

Репутация: -  3  +


и вовсе незачем так кричать

...
k:=0;

writeln('Vvedite nomer izmenyaemoi stroki:');
while not eof(sp) do
begin
naz:='';
inc(k);
for i:=1 to 5 do
begin
readln(sp,name);
naz:=naz+name+' ';
end;
writeln(k,'. ',naz);

end;

readln(nomst);
writeln('Vvedite nomer izmenyaemogo polya');
readln(nompl);
writeln('Vvedite novoe znacheniee, vibrannogo polya');
readln(pole);

reset(sp);
k:=0;

while k < (nomst-1)*5+nompl-1 do
begin
READLN(sp,name);
writeln(temp,name);
inc(k);
end;
...


по-моему, так
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 19.12.2017 5:09
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"