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

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

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

 
 Ответить  Открыть новую тему 
> проблемма с программой
Slang
сообщение 7.05.2005 17:02
Сообщение #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
она не записывает строку в файл, и файл получается пустой...
помогите решить проблему
 К началу страницы 
+ Ответить 
Altair
сообщение 7.05.2005 17:06
Сообщение #2


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

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

Репутация: -  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 
 К началу страницы 
+ Ответить 
slang
сообщение 7.05.2005 17:11
Сообщение #3





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

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


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

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


Прикрепленные файлы
Прикрепленный файл  GOP_2.PAS ( 1.75 килобайт ) Кол-во скачиваний: 143
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
slang
сообщение 7.05.2005 17:32
Сообщение #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 - 7.05.2005 17:33


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


Гость






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

Я бы заменил s[i] в процедуре Work на простой Ch: Char... Только не забывай сначала читать, а потом сравнивать с чем-то...
 К началу страницы 
+ Ответить 
slang
сообщение 7.05.2005 17:58
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.05.2005 18:00
Сообщение #7


Гость






Это не подойдет?
FAQ: Строки
 К началу страницы 
+ Ответить 
slang
сообщение 7.05.2005 18:04
Сообщение #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 
 К началу страницы 
+ Ответить 
slang
сообщение 7.05.2005 18:09
Сообщение #9





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

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


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

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


Гость






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

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





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

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


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

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

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


Гость






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

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


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

СНАЧАЛА ЧИТАЙ, ПОТОМ - ПРОВЕРЯЙ !!!
 К началу страницы 
+ Ответить 
slang
сообщение 7.05.2005 18:28
Сообщение #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

 



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