Помощь - Поиск - Пользователи - Календарь
Полная версия: проблемма с программой
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Slang
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
ты файл закрыть забываешь
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);
slang
все работает спасибо!
slang
поторопился с выводами...вообщем все работает, вот только в новом файле в начале дописывается странный символ, а так все ок, вот текст программы попробуйте и по возможности подскажите

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.

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

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

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

ок...попробую, есть ещё один способ реализации этой программы, только не знаю есть ли функция типа функции EXPLODE (C++,PHP),которая позволяет разбивать строку на массив через заданную переменную...в моем случае это пробел...т.е. надо разбить строку на массив через пробел.
volvo
Это не подойдет?
FAQ: Строки
slang
Цитата(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;

попробовал заменить вот так...все работает нормально, только вот откуда то беруться два пробела в начале...к этому тоже могут предраться...
slang
Цитата(volvo @ 7.05.05 18:00)
Это не подойдет?
FAQ: Строки

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

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

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

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

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


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

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

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


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

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

все спасибо...все работает!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.