Работа с текстовым файлом - PascalABC.NET (24921)
Формулировка задачи:
Уважаемые программисты!
Условие задачи следующее: Вывести ФИО и оценки по физике, средний балл которых больше 4,5 балла.
Сам только написал программу вывода самого текстового файла на экран. Все, что смог сделать..
Файл был создан в блокноте:
Группа ФИО Год рождения Пол Оценки по физике Оценки по математике Оценки по информатике Степендия
101 Попов Виктор Алексеевич 1995 М 55545 45344 43544 2000
101 Алексеев Игорь Алексеевич 1994 М 54453 45533 33354 1800
102 Иванов Игорь Олегович 1995 М 44435 44444 53334 1900
104 Петрова Ольга Дмитриевна 1996 Ж 55545 43544 55544 2000
103 Круглова Ирина Ивановна 1994 Ж 55434 43234 55433 1900
104 Сидоров Григорий Ильич 1993 М 55455 35435 23543 1800
101 Иванников Олег Огегович 1995 М 55552 43533 45453 1900
104 Кириллова Дарья Валерьевна 1995 Ж 55554 43433 55555 1900
102 Пантюхина Ксения Владимировна 1994 Ж 33335 45343 54545 1900
105 Зайцев Павел Дмитриевич 1995 М 55555 33333 44444 2000
Пожалуйста помогите!
Решение задачи: «Работа с текстовым файлом»
textual
Листинг программы
const fName = 'pro.txt'; findStr = 'информатика'; // данное слово должно быть с третьей до предпоследней позиции findYear = 1990; // год должен быть не менее заданного и идти последним словом begin foreach var S : String in ReadLines(fName) do begin var IndexStr := 0; var IndexYear := 0; var Index := 0; foreach var W : String in S.ToWords(' ') do begin Index += 1; if W.ToUpper = findStr.ToUpper then IndexStr := Index; try if StrToInt(W) >= findYear then IndexYear := Index; except end; end; if (IndexStr > 2) and (IndexStr < Index) and (IndexYear = Index) then // вот здесь мы и выявим правильность позиций WriteLn(S); end; end.
Объяснение кода листинга программы
- Объявлены константы:
- fName = 'pro.txt' - путь к текстовому файлу
- findStr = 'информатика' - строка, которую нужно найти в файле
- findYear = 1990 - год, который должен быть последним найденным словом
- Создается цикл, который проходит по каждой строке файла:
- foreach var S : String in ReadLines(fName) do - читаем строки из файла
- Внутри цикла объявлены переменные:
- var IndexStr = 0 - индекс строки, содержащей искомое слово
- var IndexYear = 0 - индекс строки, содержащей искомый год
- var Index = 0 - общий индекс текущей строки
- В каждой строке разделяем слова и проверяем их:
- foreach var W : String in S.ToWords(' ') do - разбиваем строку на слова
- Если слово совпадает с искомым словом (не учитывая регистр), то запоминаем его индекс:
- if W.ToUpper = findStr.ToUpper then - приводим слова к верхнему регистру для сравнения
- var IndexStr := Index; - запоминаем индекс
- Если слово является числом и больше или равно искомому году, то запоминаем его индекс:
- try
- if StrToInt(W) >= findYear then
- var IndexYear := Index; - запоминаем индекс
- except
- end; - обрабатываем ошибку, если слово не является числом
- После проверки всех слов в строке, проверяем условия для вывода строки:
- if (IndexStr > 2) and (IndexStr < Index) and (IndexYear = Index) then - выводим строку, если условия выполняются
- Код завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д