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

> Правила раздела!

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

 
 Ответить  Открыть новую тему 
> Запись в конец строки ?
unic
сообщение 10.03.2011 16:37
Сообщение #1


Новичок
*

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

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


//

Сообщение отредактировано: unic - 11.03.2011 0:51


--------------------
Изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 10.03.2011 19:07
Сообщение #2


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(unic @ 10.03.2011 16:37) *
никак не соображу каким образом можно записать в конец строки (текстового файла) .
Задачка простая , считать-посчитать , но вот добавить в конец строки смутило.
формат файла :

<букофки> <букофки> <циферки> <сюда записать>

Давай уточним. Ты имеешь текстовый файл, содержащий некоторое количество строк, и хочешь добавить фрагмент в конец некоторой строки (не обязательно последней)?
Если так, то тебе придется перезаписать весь остаток файла, начиная с той строки, которую ты редактируешь. При этом возникнет проблема: если бы будешь писать в тот же файл, то ты будешь затирать то, что еще не прочитал. Поэтому ты либо прочти весь файл в какой-то буфер, либо (на практике лучше) пиши новый файл с другим названием (временный), а по окончании процесса сотри старый файл и переименуй новый.

Например, тебе надо в 10-ю строку дописать 'asdf'. Это можно сделать как-то так:
fn:= 'myfile.txt';
assign(f,fn);
reset(f);
assign(t,'temp.txt');
rewrite(t);
i:= 0;
while not EoF(f) do begin
readln(f,s);
Inc(i);
if i=10 then s:= s+'asdf';
writeln(t,s)
end;
close(t);
close(f);
erase(f);
rename(t,fn);


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
unic
сообщение 10.03.2011 22:09
Сообщение #3


Новичок
*

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

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


//

Сообщение отредактировано: unic - 11.03.2011 0:51


--------------------
Изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 10.03.2011 22:49
Сообщение #4


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(unic @ 10.03.2011 22:09) *
выбрал другой путь - через массив типа string
Можно и через массив (особенно, если массив динамический). Проблема только в том, что в общем случае файлы могут быть и больше имеющегося объема памяти.

Цитата
но когда файл прочитывается до конца , вылетает ошибка
собстно почему она возникает ? Вроде условия прописаны ..
Я не настолько хорошо (а точнее, совсем не) знаком с PascalABC, чтоб указывать на ошибку.. Но в нормальных компиляторах все же требуется сначала выделить память под массив (SetLength), а потом уже им пользоваться. Если этого не сделать, то произойдет выход за границы массива и порча памяти, которая может привести к любым ошибкам - в частности, как то, что ты получаешь.
Но я не очень удивлюсь, если в PascalABC введена возможность автоматической аллокации, как в PHP типа. Уж уродовать язык, так уродовать до конца..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 10.03.2011 23:04
Сообщение #5


Гость






Цитата
собстно почему она возникает ?
Потому что until c='#13'; и until c=#13; - это очень разные вещи... Ну, и не забывай, конечно, память под T выделять, а то ошибка будет другая...
 К началу страницы 
+ Ответить 
unic
сообщение 10.03.2011 23:31
Сообщение #6


Новичок
*

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

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


Всем огромное спасибо , нашел проблемы .

1) используя функцию setlength , я брал переменную i:=2 , тк отсчет в массивах начинается с 0 , получался массив размером 1 , эту же переменную использовал и при записи данных t[i] , те записывал во вторую ячейку , которой не существовало .

2) Избавился от while not eof(f) , оставив только repeat until eof(f);

и еще раз спасибо что нашли время для ответов на мои глупые вопросы .


Рабочая версия :

uses crt;

var t:array of string;
n:array of integer;
f:text;
i,h,a,b,z:integer;
s:string;
m:char;
begin

// Заносим строки в массив //

i:=2;
assign(f,'data.txt');
reset(f);
repeat
setlength(t,i);
readln(f,t[i-1]);
inc(i);
until eof(f);
setlength(n,i);

// Собираем среднее арифметическое

reset(f);
i:=i-2;
for h:=1 to i do
begin
repeat
read(f,m);
until m=' ';
repeat
read(f,m);
until m=' ';
readln(f,a,b,z);
n[h]:=round((a+b+z)/3);
end;
close(f);
//Начинаем записывать в файл
rewrite(f);
for h:=1 to i do begin
str(n[h],s);
writeln(f,t[h],' Средний балл :',' ',s);
end;
close(f);
writeln('Программа успешно выполнена');
readkey;
end.




Текстовый файл:

Цитата

Вася Васильев 33 55 22
Иван иванов 67 22 88
Петр Петров 11 13 66


Сообщение отредактировано: unic - 11.03.2011 0:40


--------------------
Изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Вячеслав Л.
сообщение 11.03.2011 12:43
Сообщение #7


Бывалый
***

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

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


Надо ужимать время редактирования. Сколько можно читать ответы, не зная вопросов?


--------------------
Само знание есть сила
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 11.03.2011 16:07
Сообщение #8


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Вячеслав Л. @ 11.03.2011 12:43) *
Надо ужимать время редактирования. Сколько можно читать ответы, не зная вопросов?

Уже ужато до полутора суток (если я правильно помню). Можно и больше ужать, но полицейские методы не всегда самые эффективные. Именно по этой причине я в последнее время стараюсь включать полную цитату в ответ (в этой теме она тоже есть).

Совет:
если тебе не нравятся действия пользователя - у тебя всегда есть право понизить ему репутацию. Не надо перекладывать это на админов. И не надо говорить, что это неэффективно. Это не менее эффективно, чем твой голос при выборе президента yes2.gif.

Просьба:
красить сообщения, не относящиеся к собственно теме, в серый цвет.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Вячеслав Л.
сообщение 12.03.2011 14:54
Сообщение #9


Бывалый
***

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

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


Цитата
если тебе не нравятся действия пользователя - у тебя всегда есть право понизить ему репутацию
Хорошо. Я только боюсь, что unic все равно своего добился: содержимое его сообщений никто не увидит. А то, что он имеет репутацию 0, -1 или -10, ему наплевать на это, так что, боюсь, без "полицейских" мер все равно не обойтись.

Цитата
Это не менее эффективно, чем твой голос при выборе президента
Такового не имею smile.gif


--------------------
Само знание есть сила
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 12.03.2011 16:14
Сообщение #10


mea culpa
*****

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

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


Можно отвечать только через сутки каждый раз) Вообще, не пойму, что за вредительство - боится, что одногруппники эту тему нагуглят? Даже если и так, то пусть лучше нагуглят, чем такое западло делать тем, кто ему помог dry.gif


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
unic
сообщение 12.03.2011 16:29
Сообщение #11


Новичок
*

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

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


Удалил лишь по тому что считал свой вопрос уж больно глупым для данного форума . Да и в принципе задание я выполнил , код отписал здесь +текст файла+задание в заголовке, 2 раза поблагодарил людей которые выручили , собстно что еще требуется от меня ? Да и в чем вопрос , у вас IPB стоит , по-моему в два клика можно восстановить сообщение (покрайней мере в VB была такая функция) . А вот оскорблять - это вы уже граждане сами некрасиво поступаете

Сообщение отредактировано: unic - 12.03.2011 16:32


--------------------
Изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Вячеслав Л.
сообщение 12.03.2011 17:06
Сообщение #12


Бывалый
***

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

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


Цитата
Удалил лишь по тому что считал свой вопрос уж больно глупым для данного форума
Подумай, что произойдет с форумом, если каждый, кто посчитает свой вопрос глупым, удалит его?

Цитата
Да и в принципе задание я выполнил , код отписал здесь +текст файла+задание в заголовке, 2 раза поблагодарил людей которые выручили , собстно что еще требуется от меня ?
Сдал сам, подумай о других. У кого-то будет такой же вопрос и человек сможет найти его через поисковик или через поиск по форуму. Возможно такое? Ты лишаешь людей этой возможности.

Цитата
Да и в чем вопрос , у вас IPB стоит , по-моему в два клика можно восстановить сообщение (покрайней мере в VB была такая функция)
Зачем лишний раз дергать администратора, если можно просто оставить как было?

Цитата
А вот оскорблять - это вы уже граждане сами некрасиво поступаете
+1 Unconnected, ты не прав.


Может, отделить последние сообщения?


--------------------
Само знание есть сила
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 12.03.2011 17:19
Сообщение #13


mea culpa
*****

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

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


Цитата
Удалил лишь по тому что считал свой вопрос уж больно глупым для данного форума .


Я считаю, это вранье. Ничего правдоподобнее придумать не мог? После разговора в теме ему вдруг внезапно показалось, что для ДАННОГО форума вопрос слишком глуп! Не захотел портить ветку глупыми вопросами, и всё стер.. не, надо было перенести на более "глупый" форум.


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
unic
сообщение 12.03.2011 19:41
Сообщение #14


Новичок
*

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

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


я здесь регистрировался только чтобы задать вопрос , мне как то с высокой колокольни на репутацию и на ваши слова , которые я сейчас расцениваю , как попытку устроить холивар на пустом месте . разговор закончен , нарушил правила форума - бан , в противном случае понижение репутации . Так зачем же организовывать бессмысленную болтовню , если мне и так понятно что на данном форуме не приветствуется удаление своих же постов ?! Не понимаю..

Сообщение отредактировано: unic - 12.03.2011 20:32


--------------------
Изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Вячеслав Л.
сообщение 13.03.2011 15:59
Сообщение #15


Бывалый
***

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

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


Цитата
Так зачем же организовывать бессмысленную болтовню , если мне и так понятно что на данном форуме не приветствуется удаление своих же постов ?!
К чему тогда был этот пост? Нельзя было просто извиниться? Надо было придумать причину: ... Удалил лишь по тому что считал свой вопрос уж больно глупым для данного форума ...?

Цитата
как попытку устроить холивар на пустом месте
Ну, нам заняться нечем dry.gif

Цитата
нарушил правила форума - бан
Бан - крайняя мера, полностью согласен с администрацией. Если банить за каждое нарушение...


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

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

 



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