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

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

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

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


Гость






program gop2;
uses crt;

var
q,l,i : integer;
f1,f2 : text;
p,qq : char;
s : string;
name,name1 : string[80];
procedure newfile;
begin
write('enter file name f1:');
readln(name);
assign(f1,name);
rewrite(f1);
writeln('text:');
readln(s);
write(s);
writeln(f1,s);
readln;
end;
procedure work;
begin
write('enter file name f1:');
readln(name);
assign(f1,name);
reset(f1);
write('enter file name f2:');
readln(name1);
assign(f2,name1);
rewrite(f2);
qq:=' ';
l:=length(s);
for i:=1 to l do
begin
if (s[i]='-') then
begin
while (not eof(f1) and (s[i]<>' ')) do
read(f1,s[i]);
end;
if ((s[i]<>'-') and (s[i]<>' ')) then
write(f2,s[i]);
if (s[i]=' ') then
write(f2,qq);
if (not eof(f1)) then
read(f1,s[i]);
end;
reset(f1);
reset(f2);
end;
procedure view;
begin
write('enter file name: ');
readln(name);
writeln;
assign(f1,name);
reset(f1);
while not eof(f1) do
begin
read(f1,qq);
write(qq);
end;
readln;
end;
begin
repeat
clrscr;
writeln(' =============menu==============');
writeln(' 1 - create new file ');
writeln(' 2 - run program ');
writeln(' 3 - view file ');
writeln(' 4 - exit ');
writeln(' ===============================');
readln(q);
clrscr;
case q of
1: newfile;
2: work;
3: view;
end;
until q=4;
end.


в этой программе не работает procedure newfile
она не записывает строку в файл, и файл получается пустой...
помогите решить проблему
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

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


ты файл закрыть забываешь
procedure newfile;
begin
write('enter file name f1:');
readln(name);
assign(f1,name);
rewrite(f1);
writeln('text:');
readln(s);
write(s);
writeln(f1,s);
readln;
end;

добавь в конце процедуры close(F1);


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





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

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


все работает спасибо!

Сообщение отредактировано: slang -


Прикрепленные файлы
Прикрепленный файл  GOP_2.PAS ( 1.75 килобайт ) Кол-во скачиваний: 249
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4





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

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


поторопился с выводами...вообщем все работает, вот только в новом файле в начале дописывается странный символ, а так все ок, вот текст программы попробуйте и по возможности подскажите

program gop2;
uses crt;

var
q,l,i : integer;
f1,f2 : text;
p,qq : char;
s : string;
name,name1 : string[80];
procedure newfile;
begin
write('enter file name f1:');
readln(name);
assign(f1,name);
rewrite(f1);
writeln('text:');
readln(s);
writeln(f1,s);
close(f1);
end;
procedure work;
begin
write('enter file name f1:');
readln(name);
assign(f1,name);
reset(f1);
write('enter file name f2:');
readln(name1);
assign(f2,name1);
rewrite(f2);
qq:=' ';
while not eof(f1) do
begin
if (s[i]='-') then
begin
while (not eof(f1) and (s[i]<>' ')) do
read(f1,s[i]);
end;
if ((s[i]<>'-') and (s[i]<>' ')) then
write(f2,s[i]);
if (s[i]=' ') then
write(f2,qq);
if (not eof(f1)) then
read(f1,s[i]);
end;
close(f1);
close(f2);
end;
procedure view;
begin
write('enter file name: ');
readln(name);
writeln;
assign(f1,name);
reset(f1);
while not eof(f1) do
begin
read(f1,qq);
write(qq);
end;
readln;
end;
begin
repeat
clrscr;
writeln(' =============menu==============');
writeln(' 1 - create new file ');
writeln(' 2 - run program ');
writeln(' 3 - view file ');
writeln(' 4 - exit ');
writeln(' ===============================');
readln(q);
clrscr;
case q of
1: newfile;
2: work;
3: view;
end;
until q=4;
end.



Сообщение отредактировано: slang -


Прикрепленные файлы
Прикрепленный файл  GOP_2.PAS ( 1.75 килобайт ) Кол-во скачиваний: 366
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






А происходит это потому, что ты обращаешься к s[i] еще до того, как прочитал его из файла. Кстати, зачем тебе s[i] (и вообще переменная i) если ты ее нигде не изменяешь? Она как была 0 при старте программы, так ты и работаешь с s[0] все время... Отсюда, кстати, и "странный" символ - длина введенной ранее строки.

Я бы заменил s[i] в процедуре Work на простой Ch: Char... Только не забывай сначала читать, а потом сравнивать с чем-то...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





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

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


Цитата(volvo @ 7.05.05 17:48)
А происходит это потому, что ты обращаешься к s[i] еще до того, как прочитал его из файла. Кстати, зачем тебе s[i] (и вообще переменная i) если ты ее нигде не изменяешь? Она как была 0 при старте программы, так ты и работаешь с s[0] все время... Отсюда, кстати, и "странный" символ - длина введенной ранее строки.

Я бы заменил s[i] в процедуре Work на простой Ch: Char... Только не забывай сначала читать, а потом сравнивать с чем-то...

ок...попробую, есть ещё один способ реализации этой программы, только не знаю есть ли функция типа функции EXPLODE (C++,PHP),которая позволяет разбивать строку на массив через заданную переменную...в моем случае это пробел...т.е. надо разбить строку на массив через пробел.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Это не подойдет?
FAQ: Строки
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8





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

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


Цитата(volvo @ 7.05.05 17:48)
А происходит это потому, что ты обращаешься к s[i] еще до того, как прочитал его из файла. Кстати, зачем тебе s[i] (и вообще переменная i) если ты ее нигде не изменяешь? Она как была 0 при старте программы, так ты и работаешь с s[0] все время... Отсюда, кстати, и "странный" символ - длина введенной ранее строки.

Я бы заменил s[i] в процедуре Work на простой Ch: Char... Только не забывай сначала читать, а потом сравнивать с чем-то...


while not eof(f1) do
begin
if (p='-') then
begin
while (not eof(f1) and (p<>' ')) do
read(f1,p);
end;
if ((p<>'-') and (p<>' ')) then
begin
write(f2,p);
write(f2,qq);
end;
if (not eof(f1)) then
read(f1,p);
end;

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





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

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


Цитата(volvo @ 7.05.05 18:00)
Это не подойдет?
FAQ: Строки

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


Гость






Ну, и что? Опять же, ты прочел символ в P прежде чем его сравнивать с '-' ? Нет. Вот тебе и лишние символы

Цитата
а попроще нельзя? для моего случая?
а завтра придет кто-нибудь, кому надо бить строку по ':', и тоже попросит для ЕГО случая... Нет уж... Что есть...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11





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

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


Цитата(volvo @ 7.05.05 18:10)
Ну, и что? Опять же, ты прочел символ в P прежде чем его сравнивать с '-' ? Нет. Вот тебе и лишние символы

а завтра придет кто-нибудь, кому надо бить строку по ':', и тоже попросит для ЕГО случая... Нет уж... Что есть...

что значит прочел p прежде чем сравнить с '-', у меня он же сразу после while идет...где там чтение то??
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Так вот то-то и оно, что нету !!!
При входе в процедуру P чему равно? Не знаешь? Я скажу тебе: #0 И независимо от содержимого твоего файла сразу в результирующий добавятся 2 пробела (точнее #0 и пробел...)

Смотри:
while not eof(f1) do
begin
{ Откуда берется первый P ????? }
if (p='-') then
{ Дальше уже неверно }


Ты P из файла читал? Нет... Так кто тебе дал право его с чем-то сравнивать... Это - воздух. Ниоткуда ничего не берется. 10-ый раз повторяю:

СНАЧАЛА ЧИТАЙ, ПОТОМ - ПРОВЕРЯЙ !!!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13





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

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


Цитата(volvo @ 7.05.05 18:20)
Так вот то-то и оно, что нету !!!
При входе в процедуру P чему равно? Не знаешь? Я скажу тебе: #0 И независимо от содержимого твоего файла сразу в результирующий добавятся 2 пробела (точнее #0 и пробел...)

Смотри:
while not eof(f1) do
      begin
        { Откуда берется первый P ????? }
        if (p='-') then
{ Дальше уже неверно }


Ты P из файла читал? Нет... Так кто тебе дал право его с чем-то сравнивать... Это - воздух. Ниоткуда ничего не берется. 10-ый раз повторяю:

СНАЧАЛА ЧИТАЙ, ПОТОМ - ПРОВЕРЯЙ !!!

все спасибо...все работает!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 2.09.2025 14:18
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name