0 / 0 / 0
Регистрация: 07.02.2014
Сообщений: 7
1

Работа с файлами. Обращение к определенной строке

08.02.2014, 15:23. Показов 3083. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть file.txt с четырьмя случайными числами через запятую в каждой строке.

Пример.

892745, 864, 82364, 62345
9435, 823645, 72.28, 7364
2937,2346...

Нужно, чтобы программа читала первую строку, делала несколько вычислений и записывала эти вычисления в другой файл txt
аналогично с последующими строками.

В итоге должен получиться файл с таким же кол-вом строк, только с ответами.

Как можно написать, чтобы обратиться к определенной строке в файле и чтобы программа понимала разделение запятой и записывала данные в какие-то временные переменные для вычисления для дальнейшей записи их в другой файл
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.02.2014, 15:23
Ответы с готовыми решениями:

Обращение к определенной строке
есть возможность обращения к определенной строке с выбранным полем? типа я к примеру делаю...

Работа с текстовыми файлами. Разбиение текста на строки определенной длины.
Разбить произвольный текст находящийся в файле, на строки определенной длины. При переносе слов...

DataGrid и работа с конкретными строками. Обращение по id к строке
Ситуация: есть DataGrid, к нему присобачен: ObservableCollection<KLACC_CnuCOK> CnuCOK; Через...

Обращение к строке двумерного массива и работа с ней
Собственно задача: Дан двумерный массив целых чисел. а) Составить программу, определяющую, верно...

10
Модератор
Эксперт С++
13496 / 10751 / 6406
Регистрация: 18.12.2011
Сообщений: 28,687
08.02.2014, 19:35 2
Лучший ответ Сообщение было отмечено taronsarkisyan как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
int main()
{
   FILE *fin,*fout;
   int i;
   double x[4],res;
   fin=fopen("itput.txt","rt");
   fout=fopen("out.txt","wt");
   if(fin==NULL || fout==NULL)
         return 1;
   while(!eof(fin))
   {
        for(i=0;i<4;i++)
          fscanf("%lf",&x[i]);
       res=x[0]+x[3];
       fprintf(fout,"%lf\n",res);
   }
   fclose(fout);
   return 0;
}
1
0 / 0 / 0
Регистрация: 07.02.2014
Сообщений: 7
08.02.2014, 22:38  [ТС] 3
Цитата Сообщение от zss Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
int main()
{
   FILE *fin,*fout;
   int i;
   double x[4],res;
   fin=fopen("itput.txt","rt");
   fout=fopen("out.txt","wt");
   if(fin==NULL || fout==NULL)
         return 1;
   while(!eof(fin))
   {
        for(i=0;i<4;i++)
          fscanf("%lf",&x[i]);
       res=x[0]+x[3];
       fprintf(fout,"%lf\n",res);
   }
   fclose(fout);
   return 0;
}
запускаю (F9) закрывается консоль,
в файле out.txt пусто

в файле "itput.txt"
поставил такое содержимое

892745, 864, 82364, 62345
9435, 823645, 72.28, 7364
892745, 864, 82364, 62345
9435, 823645, 72.28, 7364

получается
i - номер строки;
x[4] - это массив дробных чисел
res - результат с дробным числом

т.е. программа понимает
x[1] как =892745
x[2] =864
x[3] =82364
x[4] =62345 ?

не понимаю что тут написано fscanf("%lf",&x[i]); программа читает каждое число через запятую в сроке [i]???
0
Модератор
Эксперт С++
13496 / 10751 / 6406
Регистрация: 18.12.2011
Сообщений: 28,687
08.02.2014, 23:22 4
Цитата Сообщение от taronsarkisyan Посмотреть сообщение
в файле out.txt пусто
А Вы уверены, что файл itput.txt открылся?
Скорее всего Вы его не туда положили.
Для надежности напишите так:
C
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
#include <stdio.h>
#include <conio.h>
int main()
{
   FILE *fin,*fout;
   int i;
   double x[4],res;
   fin=fopen("c:\\temp\\itput.txt","rt");// c:\\temp\\itput.txt - полный адрес файла, два \\ обязательно!!!
   fout=fopen("out.txt","wt");
   if(fin==NULL || fout==NULL)
   {
         puts("Файл не открылся!");
         getch();
         return 1;
   }
   while(!eof(fin))
   {
        for(i=0;i<4;i++)
          fscanf("%lf",&x[i]); // %lf означает ввод числа с плав. запятой.
       res=x[0]+x[3];
       fprintf(fout,"%lf\n",res);
   }
   fclose(fout);
   return 0;
}
1
0 / 0 / 0
Регистрация: 07.02.2014
Сообщений: 7
09.02.2014, 04:41  [ТС] 5
Цитата Сообщение от taronsarkisyan
#include <stdio.h>
int main()
{
FILE *fin,*fout;
int i;
double x[4],res;
fin=fopen("C:\\Dev-Cpp\\DCS\\itput.txt","rt");
fout=fopen("C:\\Dev-Cpp\\DCS\\out.txt","wt");
if(fin==NULL || fout==NULL)
return 1;
while(!eof(fin))
{
for(i=0;i<4;i++)
fscanf("%lf",&x[i]);
res=x[0]+x[3];
fprintf(fout,"%lf\n",res);
}
fclose(fout);
return 0;
}
то же самое: F9, файл out.txt пустой

версия компилятора
Bloodshed Software, Dev-C++ Version 4.9.9.2

ошибок и предупреждений не выдает(
0
Модератор
Эксперт С++
13496 / 10751 / 6406
Регистрация: 18.12.2011
Сообщений: 28,687
09.02.2014, 11:17 6
Это СПЕЦИАЛЬНО добавлено для вывода сообщения о том,
что файл не открылся:
C
1
2
3
4
5
6
   if(fin==NULL || fout==NULL)
   {
         puts("Файл не открылся!");
         getch();
         return 1;
   }
А знакомо ли вам такое слово "ОТЛАДЧИК"?
Вместо того, чтобы запускать программу нажимаете клавишу F10
и далее при каждом нажатии F10 будет выполняться одна строчка кода.
1
0 / 0 / 0
Регистрация: 07.02.2014
Сообщений: 7
09.02.2014, 15:14  [ТС] 7
F9, консоль закрывается

открываю
C:\Dev-Cpp\DCS\out.txt



Еще пробовал скинуть в корневую папку диска "C:\", отключил UAC, так же само

убрал файл itput.txt выводит ошибку, значит открывает, но почему не сохраняет результат
0
Модератор
Эксперт С++
13496 / 10751 / 6406
Регистрация: 18.12.2011
Сообщений: 28,687
09.02.2014, 15:23 8
Кстати, у Вас fscanf написана неправильно, надо
C++
1
fscanf(fin,"%lf",&x[i]);
1
0 / 0 / 0
Регистрация: 07.02.2014
Сообщений: 7
09.02.2014, 17:33  [ТС] 9
Цитата Сообщение от zss Посмотреть сообщение
Кстати, у Вас fscanf написана неправильно, надо
C++
1
fscanf(fin,"%lf",&x[i]);
Исправил, ничего не изменилось
файл пуст
0
Модератор
Эксперт С++
13496 / 10751 / 6406
Регистрация: 18.12.2011
Сообщений: 28,687
09.02.2014, 18:41 10
Лучший ответ Сообщение было отмечено taronsarkisyan как решение

Решение

А опечатку в имени функции feof исправили?
C
1
while(!feof(fin))
Добавлено через 1 минуту
Если бы попробовали пользоваться отладкой
(хотя бы клавишей F10),
то заметили бы, что цикл не выполняется ни разу.
1
0 / 0 / 0
Регистрация: 07.02.2014
Сообщений: 7
09.02.2014, 22:55  [ТС] 11
Цитата Сообщение от zss Посмотреть сообщение
А опечатку в имени функции feof исправили?
C
1
while(!feof(fin))
Добавлено через 1 минуту
Если бы попробовали пользоваться отладкой
(хотя бы клавишей F10),
то заметили бы, что цикл не выполняется ни разу.
Ура! Заработало) Спасибо большое )
0
09.02.2014, 22:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.02.2014, 22:55
Помогаю со студенческими работами здесь

работа с файлами(как написать программу добавления в текстовый файл после какой-то определённой буквы одного пробела?)
ребят подскажите как написать программу добавления в текстовый файл после какой-то определённой...

Как обратиться к определенной колонке ТЗ и к определенной строке из этой колонки?
Как обратиться к определенной колонке ТЗ и к определенной строке из этой колонки? Добавлено...

Работа с файлами, название файла задается в командной строке
Помогите с заданием на контрольную пожалуйста. Написать программу, определяющую символ чаще других...

Работа с текстовыми файлами: найти последний символ в строке
Задача: Текстовый файл состоит из нескольких строк. Записать во второй файл последние символы из...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru