Работа с файлами |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Работа с файлами |
Tribunal |
Сообщение
#1
|
Бывалый Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: 0 |
у меня есть две задачи:
1. Даны два целых числа i и j и файл вещественных чисел, содержащий ненулевую часть верхней треугольной матрицы (по строкам). Вывести порядок матрицы и ее элемент, расположенный в i-й строке и j-м столбце (строки и столбцы нумеруются от 1). Если требуемый элемент находится в нулевой части матрицы, то вывести 0; если элемент отсутствует, то вывести –1. 2. Дано целое число N и текстовый файл с именем Name1, содержащий один абзац текста, выровненный по левому краю. Отформатировать текст так, чтобы его ширина не превосходила N позиций, и выровнять текст по левому краю. Пробелы в конце строк удалить. Сохранить отформатированный текст в новом текстовом файле с именем Name2. во второй задаче мне нужно в слцчае если вот эти N озиций разрывает слово,то преносить это слово целиком на следующую строку,а если слово такое,что занимает больше всю строку этих N позиций,то просто разорвать его,перенеся лишние символы на следующую строку. со вторым проблем нет.проблема состоит в том,что у меня не получается сделать так,чтобы переносилось слово целиком,то есть первый случай. а в первой задаче мне не понятно,как записать в файл вводимые значения верхней ненудевой части матрицы по строкам. большая просьба помочь) Сообщение отредактировано: Tribunal - -------------------- irreparabilium felix olivio rerum
|
Lapp |
Сообщение
#2
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
проблема состоит в том,что у меня не получается сделать так,чтобы переносилось слово целиком,то есть первый случай. Проблема твоя, мне кажется, абсолютно надумана. Ее вообще нету. То есть она есть, если читать файл строками. Но это делать не нужно, и тогда она просто исчезнет. Просто сделай себе процедуру, скажем, GetWord, которая читает из файла посимвольно, и формирует переменную OneWord типа string, добавляя в конец по символу. При натыкании на пробел или конец строки она останавливается, сформированное слово выводится в новый файл (если нужно, с переводом строки). Как видишь, проблемы просто не стало.. Да, если нужно сохранять число пробелов между словами в строчке, то процедуру GetWord нужно перемежать с процедурой GetSpace, которая читает пробелы и формирует переменную OneSpace, которую тоже нужно писать в файл, если это не переход на другую строку. Сообщение отредактировано: lapp - -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Tribunal |
Сообщение
#3
|
Бывалый Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: 0 |
а как читать из файла посимвольно?
-------------------- irreparabilium felix olivio rerum
|
klem4 |
Сообщение
#4
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
goto FAQ : Файлы
- это для текстовых файлов. Для типизированный ты кроме как покомпонентно больше никак читать не можешь. -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
Сообщение
#5
|
Гость |
Цитата(lapp @ 8.04.2006 5:54) То есть она есть, если читать файл строками. Но это делать не нужно, и тогда она просто исчезнет. Я бы не стал так критически относиться к чтению текстового файла построчно... Проблема будет существовать только тогда, когда файл читается строками, и эти строки неправильно обрабатываются !!! А вот по скорости все-таки вариант со строками будет предпочтительнее, чем чтение посимвольно... |
Lapp |
Сообщение
#6
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Я бы не стал так критически относиться к чтению текстового файла построчно... Проблема будет существовать только тогда, когда файл читается строками, и эти строки неправильно обрабатываются !!! А вот по скорости все-таки вариант со строками будет предпочтительнее, чем чтение посимвольно... В целом, конечно, чтение строками удобнее, но если говорить о скорости, то лучше читать поблочно, заполнять массив символов, а из него брать символы поштучно.. Так наиболее логично. Но при нормальном кеше скорость и так должна быть неплохая (не проверял ) -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Tribunal |
Сообщение
#7
|
Бывалый Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: 0 |
вот то,что у меня получилось.только я тут не записываю во второй файл пока.
вообще,она компилируется, но затем выдает ошибку... вообще-то я делаю на делфи,но может что-то в самой программе неправильно? а ошибка выдается до того,как выводить на экран результат (Access violation at adress 004045A0 in module 'Project1.exe'.Read adress FFFFFFF7.) Может подскажете,что за ошибка?)) Код var n,m,ln,i,j:byte; x:char; oneword:string; s:array [1..40] of string; f:textfile; procedure getword(oneword:string); begin oneword:=''; repeat read(f,x); oneword:=oneword+x; m:=m+1; until (x=' ') or eoln(f); end; begin read(n); assign(f,'name1.txt'); reset(f); ln:=0; i:=1; while (not eof(f)) do begin getword(oneword); ln:=ln+m; if ln>n then inc(i); s[i]:=s[i]+oneword; if eoln(f) then inc(i); end; close(f); for j:=1 to i do writeln(s[j]); end; Сообщение отредактировано: Tribunal - -------------------- irreparabilium felix olivio rerum
|
volvo |
Сообщение
#8
|
Гость |
Ну, во-первых, у тебя глобальная и локальная переменные имеют одно и то же имя - oneword, и в этом случае ЛОКАЛЬНОЕ имя внутри процедуры имеет преимущество. То есть, из процедуры НИЧЕГО не будет возвращаться...
Или делай так: procedure getword(VAR oneword:string);или вообще работай только с глобальной переменной, то есть делай getword без параметров... |
Tribunal |
Сообщение
#9
|
Бывалый Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: 0 |
я исправила,но ошибка остается той же(
-------------------- irreparabilium felix olivio rerum
|
volvo |
Сообщение
#10
|
Гость |
А попробуй все-же прогнать вот это (работа со строками)
Вроде работает... var |
Tribunal |
Сообщение
#11
|
Бывалый Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: 0 |
я попробовала сделать так,но
она что-то странное делает с текстом -------------------- irreparabilium felix olivio rerum
|
volvo |
Сообщение
#12
|
Гость |
Ну, не знаю. Я пробовал на своем файле, все отработало, длины всех строк S меньше чем N, что, в принципе, и требовалось... Присоедини свой тестовый файл, я попробую на нем.
|
Tribunal |
Сообщение
#13
|
Бывалый Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: 0 |
ээ...сейчас почему-то ругается на эту строку
while (p > 0) and (st[p] <> ' ') do dec(p); -------------------- irreparabilium felix olivio rerum
|
volvo |
Сообщение
#14
|
Гость |
Значит, что-то изменила в программе. Знаешь, я не телепат. И если ты показываешь какие-то куски, которые у тебя не работают (причем неизвестно с какими входными данными, и какова ВООБЩЕ ПОЛНАЯ программа), то я тебе ничем помочь не могу.
Не хочешь показывать ВЕСЬ код вместе со входными данными - ищи ошибки сама. |
Tribunal |
Сообщение
#15
|
Бывалый Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: 0 |
разница лишь в том,что я делаю это в делфи,
и я удалила вот эту строку repeat а вот текстовый файл,на котором я всё это тестирую. я проверяла на паскале.там действительно всё работает. а у меня нет(( Прикрепленные файлы name1.txt ( 365 байт ) Кол-во скачиваний: 278 -------------------- irreparabilium felix olivio rerum
|
Tribunal |
Сообщение
#16
|
Бывалый Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: 0 |
вот вся программа в целом
прикрепила заново Прикрепленные файлы files.rar ( 3.86 килобайт ) Кол-во скачиваний: 222 -------------------- irreparabilium felix olivio rerum
|
volvo |
Сообщение
#17
|
Гость |
Файл заново присоедини - архив битый, ошибка при распаковке...
|
volvo |
Сообщение
#18
|
Гость |
В следующий раз будь внимательнее при наборе текста, ОК?
Вот что ДОЛЖНО было быть (и я именно это и привел в своей программе), закомментировано - то, что было у тебя: procedure TForm1.Button2Click(Sender: TObject);Все нормально работает... |
Tribunal |
Сообщение
#19
|
Бывалый Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: 0 |
спасибо,я буду внимательнее...(
но теперь этот "хвост" теряется,но не везде... Сообщение отредактировано: Tribunal - -------------------- irreparabilium felix olivio rerum
|
Tribunal |
Сообщение
#20
|
Бывалый Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: 0 |
всё,спасибо большое))
с этой задачей разобралась)) -------------------- irreparabilium felix olivio rerum
|
Текстовая версия | 27.12.2024 5:56 |