Помощь - Поиск - Пользователи - Календарь
Полная версия: Ошибка undefined filename не найден
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
bel100
var //блок объявления переменных
f1:text;
s,s1:string;
str_array:array of string;
names,subjects:array[1..4] of string;
aa:array[1..4,1..4] of integer;
i,j,n,sum:integer;
begin //начало программы
assign(f1, 'CSV.csv'); //связывание переменной f1 с файлом CSV.csv
reset(f1); // открытие файла для чтения
i:=1;
while not(eof(f1)) do
begin
readln(f1,s); //чтение строк
str_array:=s.Split(';'); {разделение строки на массив строк через разделитель}
j:=0; {счётчик столбцов устанавливаем на 0}
foreach f1 in str_array do {просматриваем все элементы массива, на каждом
шаге подставляем элемент массива в контейнер s1}
begin
write(s1,' '); {вывод на экран всех значений}
if (i=1)and(j>=1) then subjects[j]:=s1; {сохраняем названия предметов}
if (i>1)and(j=0) then names[i-1]:=s1; {сохраняем фамилии}
if (i>1)and(j>=1) then aa[i,j]:=StrSoInt(s1); {сохраняем оценки}
j:=j+1; {увеличиваем счётчик столбцов}
end;
writeln(); {делаем новую строку}
i:=i+1; {увеличиваем счётчик строк}
end;
close(f1); {закрытие файла}
assign(f1, 'CSV_OUT.csv'); //{связывание переменной f1 с файлом CSV_OUT.csv}
rewrite(f1); //открытие файла для записи
for i:=1 to 4 do
write(f1, subjects[i]); {выводим названия предметов}
write(f1,';','Очки'); {добавляем название}
writeln(f1,''); {отступаем строку}
for i:=1 to 3 do
begin
sum:=0; {обнуляем переменнуя для накопления суммы}
n:=0; {обнуляем переменнуя для накопления количества}
for j:=0 to 4 do
begin
if j=0 then write(f1,names[i],';') {выводим в файл
команды(нулевой столбец)}
else
begin
sum:=sum+aa[i+1,j]; {добавляем к сумме значение элемента}
n:=n+1; {увеличиваем количество на 1}
end;
end;
write(f1,sum,';'); {выводим среднее арифметическое в последнем столбце}
writeln(f1,''); {создаём новую строку}
end;
close(f1);
end.

В конце выдаёт undefined filename не найден хотя: в папке Pascal ABC и в документах есть?!
Беларусь;0;;;
Россия;;0;;
Украина;;;0;
Польша;;;;0
bel100
Переделал:var f1:text;
s,s1:string;
str_array:array of string;
names,subjects:array[1..4]of string;
aa:array[1..4,1..4] of integer;
i,j,n,sum:integer;
begin
assign(f1, 'CSV.csv');
reset(f1);
i:=1;
while not(eof(f1)) do
begin
readln(f1,s);
str_array:=s.Split(';');
j:=0;
foreach s1 in str_array do
begin
write(s1,' ');
if (i=1)and(j>=0) then subjects[j]:=s1;
if (i>1)and(j=0) then names[i-1]:=s1;
if (i>1)and(j>0) then aa[i,j]:=StrToInt(s1);
j:=j+1;
end;
writeln();
i:=i+1;
end;
close(f1);
assign(f1,'CSV_OUT.csv');
rewrite(f1);
for i:=1 to 4 do
write(f1,';',subjects[i]);
write(f1,';','Очки');
writeln(f1,'');
for i:=1 to 3 do
begin
if j=0 then write (f1,names[i],';')
else
begin
sum:=sum+aa[i+1,j];
n:=n+1;
write(f1,aa[i+1,j],';');
end;
write(f1,sum,';');
writeln(f1,'');
end;
close(f1);
end.

Всё равно:
КомандаОшибка времени выполнения: System.IndexOutOfRangeException: Индекс находился вне границ массива.
Стек:
в У12ДЗ№6.Program.$Main() в C:\PABCWork.NET\У12ДЗ№6.pas:строка 19
в У12ДЗ№6.Program.Main()
Федосеев Павел
Значит в файле больше 4 строк.
names,subjects:array[1..4]of string;


Измените программу так, чтобы чтение исходного файла, обработка и запись результата в файл выполнялись в потоке построчно и находились в одном цикле. Это и будет нормальным решением.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.