Работа с файлами, Обработка текстового файла |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Работа с файлами, Обработка текстового файла |
andriano |
Сообщение
#21
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
Пальчиком ткни.
|
npl |
Сообщение
#22
|
|||
Новичок Группа: Пользователи Сообщений: 21 Пол: Мужской Реальное имя: http://npfiles.ru Репутация: -1 |
obsh:string[10];
вот тут, может хватить мудить, если б вы andriano знали, давно бы уже написали нужный мне код
Сообщение отредактировано: Michael_Rybak - |
|||
andriano |
Сообщение
#23
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
Грубить не надо.
Помочь - могу, а писать код за тебя - не буду. Вот это называется типом данных: type А вот это - полем в типе "figurist", имеющим тип "string[10]": obsh:string[10]; Не следует поутать одно с другим. Вообще-то алгоритм написания программы на каком либо языке программирования примерно такой: - решить задачу ручками, отмечая про себя, какие действия при этом происходят, - записать алгоритм действий по-русски, - переписать на нужном языке программирования. При обработке текстовых файлов, как правило, удобно оказывается действовать в следующем порядке: - завести тип данных, хорошо описывающий входные данные, - завести тип данных, хорошо описывающий выходные данные, - считать входные данные в память, - в памяти обработать входняе данные с целью заполнить поля выходного типа. |
npl |
Сообщение
#24
|
Новичок Группа: Пользователи Сообщений: 21 Пол: Мужской Реальное имя: http://npfiles.ru Репутация: -1 |
"Спасибо", что не помогли, andriano. Но к счастью в этом мире есть добрые люди.
|
Michael_Rybak |
Сообщение
#25
|
Michael_Rybak Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
"Спасибо" andriano от тебя заслуживает как минимум за потраченное на тебя время. Смени тон.
|
npl |
Сообщение
#26
|
Новичок Группа: Пользователи Сообщений: 21 Пол: Мужской Реальное имя: http://npfiles.ru Репутация: -1 |
"Спасибо" andriano от тебя заслуживает как минимум за потраченное на тебя время. Смени тон. Никто не заставлял его тратить на меня время. И вовсе я не грублю. Извините, если, что-то не так сказал, но нервы перед сессией накалены до предела. Добавлено через 15 мин. Огромное спасибо volvo!!! Сообщение отредактировано: npl - |
Michael_Rybak |
Сообщение
#27
|
Michael_Rybak Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
Цитата Никто не заставлял его тратить на меня время. Аааа, т.е. когда ты задаешь вопрос, я должен не отвечать, а сначала спросить тебя, заставляешь ты меня или нет? Т.к. если я отвечу не то, что ты бы ожидал услышать, то я в ответ получу "пустые разговоры" и "мудить". Какая прелесть. Цитата но нервы перед сессией накалены до предела. Сочувствую (без сарказма). И тем не менее. |
npl |
Сообщение
#28
|
Новичок Группа: Пользователи Сообщений: 21 Пол: Мужской Реальное имя: http://npfiles.ru Репутация: -1 |
Аааа, т.е. когда ты задаешь вопрос, я должен не отвечать, а сначала спросить тебя, заставляешь ты меня или нет? Т.к. если я отвечу не то, что ты бы ожидал услышать, то я в ответ получу "пустые разговоры" и "мудить". Какая прелесть. Отвечать или нет - это личное дело каждого. А если уж решил ответить, то отвечать надо по существу, а не уходить от вопроса. |
Lapp |
Сообщение
#29
|
|||
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
|||
andriano |
Сообщение
#30
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
"Пришел барин и всех рассудил." :D
[ ] Мне кажется, вряд ли здесь кто-то не понимает по-русски. Скорее дело в другом: нужен текст на Паскале, а самому переводить с русского на Паскаль не хочтся, - пусть лучше это сделает кто-то другой! Тем более, что исправлять явно указанный недостаток автор этой темы не захотел, решив, очевидно, что и так сойдет. Между тем программа, работающая с текстовыми файлами, должна быть нечувствительна к количеству пробелов, разделяющих слова, т.е. совершенно одинаково обрабатывать "Иванов Динамо" и " Иванов Динамо ". Приведеная же программа, очевидно, с текстовыми файлами работать не умеет, а умеет только с файлами опредедленной структуры. Теперь по поводу задачи в целом (заодно уважаемый volvo сможет сравнить со своим вариантом). - Предусмотреть типы данных для фигуриста (в исходном коде уже есть) и для спортивного общества (название, Ф.И.О. ОДНОГО спортсмена, его средний результат). - Описать переменную для спортсмена (уже есть), массив длины N для обществ (благо, в условии она задана. Можно потребовать, чтобы первой строкой в файле указывалось количество обществ: для учебных/олимпиадных задач - обычное дело. А можно и не требовать: вместо массива организовать список, выделяя память для каждого очередного элемента по мере их поступления) и целую переменную для длины заполненной части массива. - написать функции (декомпозиция - великая вещь!) для: а) разбора строки с заполнением полей "фигуриста": на входе - строка из файла, возвращает - подсчитанное среднее. Функция должна уметь разбирать файлы вроде: Иванов и.И. "Спартак" 1 2 3 4 5 6 7 8 9 10 Сидоров Иван Петрович "Крылья Советов" 3, 4, 5, 5, 7, 8, 9, 10, 11, 12 Мохаммед Ибн Али ПЕру де Оннорре "ООО Челси им. Абрамовича" 2;3;4;5;6;7;8;9;10;1 Смит Джон "Определитель Матрицы" 8.0,7.0, 9, 3., 4, 1.0, 7, 5,9,2 Петров-Водкин Кузьма С. "Спартак" 3,2 1,3,2 1,3 2,1 1,1 б) поиска и добавления обществ: на входе - строка-имя общества, на выходе - номер найденного общества в массиве. Должна просматривать уже сформированную часть массива обществ, если не нашла - завести новое, обнулив все поля. Порядок действия программы: 1. Открыть файл. 1а. При необходимости считать строку с количеством обществ и выделить память для массива. 2. Цикл до окончания файла: - читаем строку - разбираем ее - находим номер общества - если средний балл спортсмена найденного общества ниже, чем вновь считанного, заменяем все данные общества новым спортсменом 3. Закрыть файл. 4. Вывести в цикле на печать заполненный массив обществ. Кстати, размещать в общедоступном месте (например, на форуме) програму без комментаиев - mauvais ton. Должна быть минимум одна строка коментария на 5-7 строк кода. Должны быть откомментированы все процедуры и функции: назначение и список параметров. Должны быть откомментированы все новые типы и их поля, а также глобальные переменные. Естественно, не должно быть коментариев типа: r := sqrt(x*x + y*y); {присваиваем переменной r значение sqrt(x*x + y*y)} |
Malice |
Сообщение
#31
|
Профи Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
Начнем тогда уж.. Внесу свою лепту для начала
type |
andriano |
Сообщение
#32
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
Начнем тогда уж.. Внесу свою лепту для начала OK. Несколько рекомендаций: ocenka: array[1..10] of integer; Насколько я помню, в фигурном катании оценки являются числом в общем случае нецелым. Рекомендую: ocenka: array[1..10] of single; procedure parse (s:string;var f:fig); Вообще-то переменная f одна на всю программу, при этом временная и глобальная. Поэтому вряд ли имеет смысл передавать ее в качестве формального параметра. Впрочем, это дело вкуса. А еще я рекомендовал сразу подсчитать средний балл и возвращать его как значение функции. function parse (s:string): single; Следующую строку: f.obsh:='"'+copy(s,1,pos ('"',s)-1)+'"'; можно немного упростить. f.obsh:='"'+copy(s,1,pos ('"',s)); Следующий код ориентирован на целые числа, кроме того, вместо: n:=n*10+ord (s[1])-$30; правильнее было бы написать: n:=n*10+ord (s[1])-ord('0'); В любом случае, рекомендую в этом месте скопировать во временную строку все символы до разделителя или конца строки, а потом преобразовать строку в число. Перед этим лучше всего сначала заменить все разделители на пробелы, а затем удалить все двойные пробелы. Ну и под конец, естественно, подсчитать средний балл. Сообщение отредактировано: andriano - |
Текстовая версия | 24.12.2024 1:21 |