33 / 28 / 9
Регистрация: 13.09.2013
Сообщений: 250

Вывод в файл/Чтение из файла формата .CSV

25.08.2014, 11:13. Показов 11147. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть задачи:
Кликните здесь для просмотра всего текста
Задача №1.
Имеется матрица размерностью MxN. Написать программу, выполняющую следующие функции:
1. Ввод c клавиатуры элементов матрицы.
2. Обработку матрицы - Переставить столбцы матрицы в порядке убывания произведения их элементов.
3. Вывод результатов обработки матрицы в файл в формате CSV.

Задача №2.
Имеется матрица размерностью MxN. Написать программу, выполняющую следующие функции:
1. Ввод элементов матрицы из файла в формате CSV.
2. Обработку матрицы - Переставить столбцы матрицы в порядке убывания произведения их элементов.
3. Вывод результатов обработки матрицы на дисплей.


И есть код к первой задаче:
Кликните здесь для просмотра всего текста
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
Program write_matrix;
 
const 
MMax = 200;
NMax = 100;
 
type
indexM = 1..MMax;
indexN = 1..NMax;
matrix = array[ indexM, indexN ] of real;
process = array[indexN] of real;
 
var
Data : matrix;
M : indexM;
N : indexN;
i, j : integer;
q, a: real;
indM : indexM;
indN : indexN;
processing : process;
name : string;
filen : text;
rash : string;
 
Begin
 
rash := '.CSV';
 
Writeln;
Writeln('          Программа:' );
Writeln(' Вводит с клавиатуры матрицу размером MxN');
Writeln('Вычисляет сумму элементов каждого столбца и' );
Writeln('  Переставляет столбцы матрицы в порядке' );
Writeln('   Убывания произведения их элементов' );
Writeln('    И записывает результат в файл.');
Writeln;
 
repeat
Write('Введите число строк(200 - максимум):');
Readln(M);
until (M>=1) and (M<=MMax);
 
repeat
Write('Введите число столбцов(100 - максимум):');
Readln(N);
until (N>=1) and (N<=NMax);
 
Writeln;
 
Writeln( 'Введите элементы матрицы (', M, ' строк, ', N, ' столбцов)' );
for indM := 1 to M do
      for indN := 1 to N do
          begin
               Write( ' Элемент [', indM, ', ', indN, ']= ' );
               readln( Data[indM,indN ] );
          end;
 
Writeln;
 
for indM := 1 to M do
  begin
  Write('|');
  
      for indN := 1 to N do
               begin
               Write(Data[indM,indN]);
               if (indN<N) then Write(',');
               end;
          
  Write('|');
  Writeln;
  end;
Writeln;
Writeln('Обработка.');
Writeln;
 
for indN :=1 to N do
  begin
  processing[indN] := 1;
    for indM :=1 to M do
    begin
     q:=Data[indM,indN];
     processing[indN] := processing[indN] * q;
    end; 
   writeln('Произведение ',indN,' столбца =',processing[indN]);
  end;
 
for i:=1 to N-1 do
for j:=i+1 to N do
if processing[i]<processing[j] then
 begin
  for indM:=1 to M do
   begin
    a:=Data[indM,i];
    Data[indM,i]:=Data[indM,j];
    Data[indM,j]:=a;
   end;
  a := processing[i];
  processing[i] := processing[j];
  processing[j] := a
 end;
 
Writeln;
 
Write('Имя файла? ');
readln(name);
name:=name+rash;
assign(filen,name);
reWrite(filen);
 
Writeln;
 
for indM := 1 to M do
  begin
  {Write('|');}
  
      for indN := 1 to N do
               begin
               Write(Data[indM,indN]);
               {if (indN<N) then Write(',');
               }end;
          
  {Write('|');}
  Writeln;
  end;
  
  close(filen);
  Writeln;
  Writeln('Готово.');
end.

Файл создаётся, но пустой...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.08.2014, 11:13
Ответы с готовыми решениями:

Содержимое docx записать в файл формата csv
Здравствуйте! Есть файл формата .docx, нужно его содержимое записать в файл формата csv. Подскажите пожалуйста как это лучше сделать, может...

Чтение файла CSV и чтение из Table View
Здравствуйте, задача считать столбцы и строки excel в TextEdit. Прошу помощи в реализиции. Вручную сохраняю xls файл в csv. Потом надо...

Копирование данных из файла csv в xls с сохранением формата
Всем доброго дня! Столкнулась с такой задачей: есть файл csv, из него необходимо скопировать лист в файл xls посредством VBA. Для начала...

39
Почетный модератор
 Аватар для Puporev
64320 / 47616 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
27.08.2014, 09:25
Студворк — интернет-сервис помощи студентам
В строке
Pascal
1
2
write('Введите имя файла: ');
readln(path);
вводи полный путь к файлу, типа D:/'11'.txt
но я это не люблю, особенно если он на рабочем столе.

Добавлено через 1 минуту
Дело еще в том, что тогда программа будет работать только на твоем компьютере, а если файл в папке с прграммой, то на любом.
0
33 / 28 / 9
Регистрация: 13.09.2013
Сообщений: 250
27.08.2014, 09:39  [ТС]
Puporev, Опять же, моя тупость) Забыл сохранить файл, а Паскаль, если несохраненный файл, то ищет в своей стандартной папке)

Добавлено через 7 минут
Puporev, последний(не факт, что не тупой) вопрос: данные в массив a идут?)
0
Почетный модератор
 Аватар для Puporev
64320 / 47616 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
27.08.2014, 09:42
У меня идут.
0
33 / 28 / 9
Регистрация: 13.09.2013
Сообщений: 250
27.08.2014, 10:11  [ТС]
Puporev, Да не) В массив с названием "а" идут? Пока нету возможности проверить
0
Почетный модератор
 Аватар для Puporev
64320 / 47616 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
27.08.2014, 10:27
Ну вот, создаю я файл 11.csv программой, код которой в предыдущей теме.
Запускаю программу, код которой (номер 2) привел в этой теме и получаю
Миниатюры
Вывод в файл/Чтение из файла формата .CSV   Вывод в файл/Чтение из файла формата .CSV  
0
33 / 28 / 9
Регистрация: 13.09.2013
Сообщений: 250
27.08.2014, 10:36  [ТС]
Puporev, ага... Создал файл с помощью предыдущей программы, назвал 11.csv, запускаю эту программу... Вот что выдает:
Окно вывода
8.0Ошибка времени выполнения: System.FormatException: Входная строка имела неверный формат.
Стек:
в System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
в System.Convert.ToDouble(String value, IFormatProvider provider)
в PABCSystem.PABCSystem.StrToFloat(String s) в C:\Program Files\PascalABC.NET\Lib\PABCSystem.pas:с трока 5583
в vvod_matrix.vvod_matrix.$Main() в C:\Users\AVS\Desktop\Program21.pas:строк а 27
в Program21.Program.Main()
4.0 6.0 1.0 2.0

Окно ошибок
PABCSystem.pas(5583) : Ошибка времени выполнения: Входная строка имела неверный формат.
0
Почетный модератор
 Аватар для Puporev
64320 / 47616 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
27.08.2014, 10:40
Попробуй в обеих программах везде заменить разделитель точка с запятой на запятую. Только внимательно, не пропусти.
0
33 / 28 / 9
Регистрация: 13.09.2013
Сообщений: 250
27.08.2014, 11:16  [ТС]
Puporev, Если в первой заменить на запятую, то в одной ячейке все...
И да, ошибка осталась...
0
Почетный модератор
 Аватар для Puporev
64320 / 47616 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
27.08.2014, 11:31
Ну я не знаю. Попробуй запустить мои программы. Если бы у меня не работало, я бы поискал ошибки, но работает и в просто АВС и в net
Вложения
Тип файла: rar Запиь и чтение матрицы файл CSV.rar (2.4 Кб, 9 просмотров)
0
33 / 28 / 9
Регистрация: 13.09.2013
Сообщений: 250
27.08.2014, 12:07  [ТС]
Puporev, Не знаю, в чем была ошибка, но ваш работает(точнее выводит данные).
Далее я добавляю часть с обработкой, и вуаля. Он пишет "Обработка", и ничего далее не делает - пропускает все циклы.
Вот мой получившийся код:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
const 
MMax = 200;
NMax = 100;
 
type
indexM = 1..MMax;
indexN = 1..NMax;
matrix = array[ indexM, indexN ] of real;
process = array[indexN] of real;
 
var
Data : matrix;
MX : indexM;
NX : indexN;
z, x : integer;
q, a: real;
indM : indexM;
indN : indexN;
processing : process;
f:text;  
s:string;
m,n,i,j:byte;
 
begin
assign(f,'12.csv');
reset(f);
readln(f,s);
n:=0;
for i:=1 to length(s) do
if s[i]=';' then n:=n+1;
m:=1;
while not eof(f) do
 begin
  readln(f,s);
  m:=m+1
 end;
close(f);
reset(f);
for i:=1 to m do
 begin
  readln(f,s);
  for j:=1 to n do
   begin
    Data[i,j]:=strtofloat(copy(s,1,pos(';',s)-1));
    delete(s,1,pos(';',s));
    write(Data[i,j]:5:2);
   end;
  writeln;
 end;
close(f);
 
Writeln;
Writeln('Обработка.');
Writeln;
 
for indN :=1 to NX do
  begin
  processing[indN] := 1;
    for indM :=1 to MX do
    begin
     q:=Data[indM,indN];
     processing[indN] := processing[indN] * q;
    end; 
   writeln('Произведение ',indN,' столбца =',processing[indN]);
  end;
 
for z:=1 to NX-1 do
for x:=i+1 to NX do
if processing[i]<processing[j] then
 begin
  for indM:=1 to MX do
   begin
    a:=Data[indM,z];
    Data[indM,z]:=Data[indM,x];
    Data[indM,x]:=a;
   end;
  a := processing[z];
  processing[z] := processing[x];
  processing[x] := a
 end;
 
Writeln;
 
for indM := 1 to MX do
  begin
  Write('|');
  
      for indN := 1 to NX do
               begin
               Write(Data[indM,indN]);
               if (indN<N) then Write(',');
               end;
          
  Write('|');
  Writeln;
  end;
 
end.
0
Почетный модератор
 Аватар для Puporev
64320 / 47616 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
27.08.2014, 12:32
Вот я более-менее навел порядок, оформление смотрите сами.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
const  MMax = 200;
       NMax = 100;
type indexM = 1..MMax;
     indexN = 0..NMax; //äëÿ èíèöèàöèè NX:=0
     matrix = array[ indexM, indexN ] of real;
     process = array[indexN] of real;
var Data : matrix;
    MX,indM : indexM;
    NX,indN : indexN;
    i, z, x : integer;
    q, a: real;
    processing : process;
    f:text;
    s:string;
begin
assign(f,'12.csv');
reset(f);
readln(f,s);
NX:=0;
for i:=1 to length(s) do
if s[i]=';' then NX:=NX+1;
MX:=1;
while not eof(f) do
 begin
  readln(f,s);
  MX:=MX+1
 end;
close(f);
reset(f);
for indM:=1 to MX do
 begin
  readln(f,s);
  for indN:=1 to NX do
   begin
    Data[indM,indN]:=strtofloat(copy(s,1,pos(';',s)-1));
    delete(s,1,pos(';',s));
    write(Data[indM,indN]:5:2);
   end;
  writeln;
 end;
close(f);
Writeln;
{writeln('Ïîëó÷åííûé ìàñèâ');
for indM:=1 to MX do
 begin
  for indN:=1 to NX do
  write(Data[indM,indN]:5:2);
  writeln;
 end;
end.  }
Writeln('Îáðàáîòêà.');
Writeln;
for indN :=1 to NX do
 begin
  processing[indN] := 1;
  for indM :=1 to MX do
   begin
    q:=Data[indM,indN];
    processing[indN] := processing[indN] * q;
   end;
  writeln('Ïðîèçâåäåíèå ',indN,' ñòîëáöà =',processing[indN]);
 end;
 
for z:=1 to NX-1 do
for x:=z+1 to NX do
if processing[z]<processing[x] then
 begin
  for indM:=1 to MX do
   begin
    a:=Data[indM,z];
    Data[indM,z]:=Data[indM,x];
    Data[indM,x]:=a;
   end;
  a := processing[z];
  processing[z] := processing[x];
  processing[x] := a
 end;
Writeln;
for indM := 1 to MX do
 begin
  for indN := 1 to NX do
  Write(Data[indM,indN]:5:2);
  Writeln;
 end;
 
end.
1
33 / 28 / 9
Регистрация: 13.09.2013
Сообщений: 250
27.08.2014, 19:52  [ТС]
Puporev, Спасибо большое)

Добавлено через 6 часов 28 минут
Puporev, разузнал о задании более подробно...
Нужно вводить/выводить из/в файла вида:
Code
1
2
2,1,3
2,1,3
Подправил ваш код. Выводит по заданию, но с вводом проблемы. Так как ввод опирался на ";" - на знак после числа, программа не считывает последний элемент столбца...
Сможете подправить?
0
Почетный модератор
 Аватар для Puporev
64320 / 47616 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
27.08.2014, 20:04
Цитата Сообщение от Xopecc Посмотреть сообщение
вводить/выводить из/в файла вида:
так это не будет файл CSV, а простой текстовый файл.

Добавлено через 58 секунд
Вы там пудрите мозги друг другу, ну и пишите сами, я не нанимался.

Добавлено через 6 минут
А если все же нужен этот формат, то прочитай внимательно это и покажи преподам. И может поймете почему у меня вместо запятой, точка с запятой.
https://ru.wikipedia.org/wiki/CSV
0
33 / 28 / 9
Регистрация: 13.09.2013
Сообщений: 250
27.08.2014, 20:35  [ТС]
Puporev, Нужно сохранять в формат .CSV. Но его будут открывать в блокноте... Из-за этого вся суть формата .CSV пропадает...
Я не прошу вас переписать код, просто я плохо разбираюсь в Паскале(С++ больше душе).
Можете объяснить вот эту часть
Pascal
1
2
3
Data[indM,indN]:=strtofloat(copy(s,1,pos(';',s)-1));
    delete(s,1,pos(';',s));
    write(Data[indM,indN]:5:2);
0
Почетный модератор
 Аватар для Puporev
64320 / 47616 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
27.08.2014, 21:04
Если в исходном файле после последнего числа нет запятой, то добавим
Pascal
1
2
3
4
5
readln(f,s);
s:=s+',';//если в файле в конце строки запятая, то не нужно
Data[indM,indN]:=strtofloat(copy(s,1,pos(',',s)-1));//копируем до запятой и преобразуем в число
delete(s,1,pos(',',s));//удаляем эту часть строки вместе с запятой
write(Data[indM,indN]:5:2);//выводим элемент матрицы с выделением 5 позиций и двумя знаками после запятой
0
33 / 28 / 9
Регистрация: 13.09.2013
Сообщений: 250
28.08.2014, 07:21  [ТС]
Puporev, А в какую строчку это добавить?
0
Почетный модератор
 Аватар для Puporev
64320 / 47616 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
28.08.2014, 07:25
Ты спросил
Цитата Сообщение от Xopecc Посмотреть сообщение
Можете объяснить вот эту часть
Я ответил. А что и куда добавлять я не понял. Просто заменить ; на запятую.

Добавлено через 1 минуту
Я совершено не понял что Вы собираетесь делать с записью файла и с чтением из него.
0
33 / 28 / 9
Регистрация: 13.09.2013
Сообщений: 250
28.08.2014, 07:43  [ТС]
Puporev, после последнего числа нету запятой, вставлял эту часть
Pascal
1
s:=s+',';//если в файле в конце строки запятая, то не нужно
в несколько мест, всё безрезультатно...

Добавлено через 1 минуту
Puporev, Вот, что программа вводит из файла:
Code
1
2
3
Введите имя файла: Тест2
 1.00 2.00
 1.00 2.00
А в файле:
Code
1
2
 1.00, 2.00, 3.00
 1.00, 2.00, 3.00
0
Почетный модератор
 Аватар для Puporev
64320 / 47616 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
28.08.2014, 07:50
Привожу пример, который уже писал, но с изменениями
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
var f:text;
    a:array[1..20,1..20] of real;
    s:string;
    m,n,i,j:byte;
begin
assign(f,'11.csv');//или txt?
reset(f);
readln(f,s);
n:=1;//заменим 0 на 1, раз в конце нет запятой
for i:=1 to length(s) do
if s[i]=',' then n:=n+1;//количество столбцов
m:=1;
while not eof(f) do
 begin
  readln(f,s);
  m:=m+1//количество строк
 end;
close(f);
reset(f);
for i:=1 to m do
 begin
  readln(f,s);
  s:=s+',';//вот здесь добавляем запятую в конец строк
  for j:=1 to n do
   begin
    a[i,j]:=strtofloat(copy(s,1,pos(',',s)-1));
    delete(s,1,pos(',',s));
    write(a[i,j]:5:1);
   end;
  writeln;
 end;
close(f);
end.
1
33 / 28 / 9
Регистрация: 13.09.2013
Сообщений: 250
28.08.2014, 07:53  [ТС]
Puporev, с первого раза угадал место, но забыл про переменную
Насчет формата: Файл создают в блокноте, но сохраняют с расширением .CSV
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.08.2014, 07:53

Чтение из файла и вывод в файл
Помогите сделать чтение из файла и вывод в файл. Вот программа var s:string; n:longint; procedure zx(t:string); begin if...

Добавить вывод в файл и чтение из файла объектов класса
Добавить вывод в файл и чтение из файла объектов класса. Работа должна отображаться на мониторе. Прошу не много подсабить. #include...

Изменение приглашения DOS, вывод в файл и чтение из файла
Создать командный файл, который выдает справку по команде, изменяющей приглашение DOS, перенаправляет в файл C:\shibanova\spravka.txt А...

Вывод в файл и последующее чтение из файла объектов класса
Как наиболее правильно и канонично выводить (так чтобы потом ещё и прочитать) объекты классов в файл? Представим ситуацию: Есть класс...

Чтение из csv-файла
Добрый день. Мне нужно открыть в своей программе cs файл и найти там все методы - выделить их в отдельные стринговые переменные....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

Новые блоги и статьи
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru