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

Считывание чисел из файла и запись их в массив

01.02.2012, 20:11. Показов 8151. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется файл txt со следующей строкой:
ght# 1, nkat= 8, str= 1.00000, lmv= 0.5000 0.0001 0.0001 (reduced coord)
ght# 2, nkat= 8, str= 1.00000, lmv= 0.4500 0.0002 0.0002 (reduced coord)
ght# 3, nkat= 8, str= 1.00000, lmv= 0.4000 0.0003 0.0003 (reduced coord)
Требуется считать из этого файла последние три цифры из каждой строки (т.е. из первой 0.5000, 0.0001, 0.0001 и т.д.) и записать их в массив 3 на 3.
Помогите, пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.02.2012, 20:11
Ответы с готовыми решениями:

Считывание чисел из нескольких textBox-ов и запись этих чисел в двумерный массив
Здравствуйте, хотелось бы задать один вопрос. У меня есть форма winforms на ней располагается не...

Считывание файла в массив и запись нового файла
Консоль VS C++. Текстовый файл открывается как бинарный, и считывается по 100 байт в массив - и...

Считывание строк из файла и запись в массив
Добрый день, уважаемые форумчане! Помогите пожалуйста в Qt осуществить считывание известного...

Считывание и запись в массив строк из файла
Есть файл-конфигурация, в котором на каждой новой строке стоит сначала число, а потом через пробел...

8
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
01.02.2012, 21:52 2
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <fstream>
#include <algorithm>
#include <string>
using std::ifstream;
using std::copy;
 
int main()
{
    ifstream In("c:\\temp\\1.txt");//здесь путь к твоему файлу надо указать
 
    typedef char buf [100];
    buf mass [3];
    
    for(int i = 0; i<3; i++)
    {
    In.getline(mass[i],100);
    }
    
    char* p1 = strstr(mass[0],"0.5");
    char* p2= strstr(mass[0],"(");
    copy(p1,p2,mass[0]);
    char* end = strstr(mass[0],"1.0");
        *end = 0; // "отрезаем" лишние значения
 
    p1 = strstr(mass[1],"0.45");
    p2= strstr(mass[1],"(");
    copy(p1,p2,mass[1]);
    end = strstr(mass[1],"1.0");
        *end = 0;
 
    p1 = strstr(mass[2],"0.40");
    p2= strstr(mass[2],"(");
    copy(p1,p2,mass[2]);
    end = strstr(mass[2],"1.0");
        *end = 0;
//теперь в массиве mass находятся 3 строки в каждой последние 3 цифры
 
 
    return 0;
}
1
1 / 1 / 0
Регистрация: 23.03.2009
Сообщений: 106
01.02.2012, 22:35  [ТС] 3
А можно ли сделать процедуру записи в массив в виде цикла? Три строчки в файле это приведено условно. Их там намного больше. Не писать же для каждой из сотни строк
C++
1
2
3
4
5
        p1 = strstr(mass[1],"0.45");
        p2= strstr(mass[1],"(");
        copy(p1,p2,mass[1]);
        end = strstr(mass[1],"1.0");
                *end = 0;
..
0
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
01.02.2012, 23:11 4
pro_mary, так и циферьки разные могут быть. задача стояла конкретная. есть файл там три строчки такого то содержания. на до сделать то то.
Цитата Сообщение от pro_mary Посмотреть сообщение
Имеется файл txt со следующей строкой:
ght# 1, nkat= 8, str= 1.00000, lmv= 0.5000 0.0001 0.0001 (reduced coord)
ght# 2, nkat= 8, str= 1.00000, lmv= 0.4500 0.0002 0.0002 (reduced coord)
ght# 3, nkat= 8, str= 1.00000, lmv= 0.4000 0.0003 0.0003 (reduced coord)
Требуется считать из этого файла последние три цифры из каждой строки (т.е. из первой 0.5000, 0.0001, 0.0001 и т.д.) и записать их в массив 3 на 3.
Помогите, пожалуйста.
какова задача в целом? найти любые данные в любом количестве строк?
0
1 / 1 / 0
Регистрация: 23.03.2009
Сообщений: 106
01.02.2012, 23:27  [ТС] 5
В файле все строки идентичны, просто я не стала загромождать сообщение сотней строк, изменяются: ght от 1 до 100, и значения lmv. Нужно записать значения lmv в массив, а тип данных - числа с плавающей точкой.
0
Эксперт по математике/физике
4216 / 3411 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
02.02.2012, 00:14 6
Примерно так:
(кстати, не три цифры, а три числа, разница есть)

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <float.h>
#include <math.h>
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
 
int main()
{
  char buf[MAX_PATH];
  ifstream inf( "путь к файлу ввода" );
  ofstream outf( "путь к файлу вывода" );
 
  if( !inf.fail() && !outf.fail() )
  {
    double array[3];
    char comma;
    int nDummy;
    double dDummy;
 
    while( !inf.eof() )
    {
       inf >> buf // ght#
           >> nDummy >> comma // 1,
           >> buf // nkat=
           >> nDummy >> comma // 8,
           >> buf // str=
           >> dDummy >> comma // 1.00000,
           >> buf // lmv=
           >> array[0] >> array[1] >> array[2];
       inf.getline( buf, MAX_PATH ); // skip rest of the line
       outf << setw(15) << array[0] << setw(15) << array[1] << setw(15) << array[2];
   }
    inf.close();
    outf.close();
  }
  else
  {
      // files opening error
  }
}
1
1 / 1 / 0
Регистрация: 23.03.2009
Сообщений: 106
02.02.2012, 00:28  [ТС] 7
Точно, три числа.. Я об этом подумала тогда, когда уже написала.. Спасибо!!
0
1 / 1 / 0
Регистрация: 23.03.2009
Сообщений: 106
14.02.2012, 19:09  [ТС] 8
Компилятор ругается на следующее:
C++
1
char buf[MAX_PATH];
Пишет : error C2065: 'MAX_PATH' : undeclared identifier..

Добавлено через 13 минут
С MAX_PATH разобралась..
А как из файла, имеющего такой вид:
ght# 1, nkat= 8, str= 1.00000, lmv= 0.5000 0.0001 0.0001
-3.78987 -1.16032 4.69394 4.69394 7.38388 9.23579 9.23579 13.45362
ght# 2, nkat= 8, str= 1.00000, lmv= 0.4500 0.0002 0.0002
-6.03831 4.74627 5.70919 5.70919 8.43435 8.74293 8.74293 10.10776
ght# 3, nkat= 8, str= 1.00000, lmv= 0.4000 0.0003 0.0003
-5.89384 4.56875 5.08418 5.08418 7.86175 9.60627 9.60627 10.21287
записать в другой файл следующее:
0.5000 0.0001 0.0001 -3.78987 -1.16032 4.69394 4.69394 7.38388 9.23579 9.23579 13.45362
0.4500 0.0002 0.0002 -6.03831 4.74627 5.70919 5.70919 8.43435 8.74293 8.74293 10.10776
0.4000 0.0003 0.0003 -5.89384 4.56875 5.08418 5.08418 7.86175 9.60627 9.60627 10.21287
т . е из нечетных строк брать последние три числа, а из четных все.
0
Эксперт по математике/физике
4216 / 3411 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
15.02.2012, 03:12 9
Цитата Сообщение от pro_mary Посмотреть сообщение
из нечетных строк брать последние три числа, а из четных все.
Использовать счётчик строк в цикле чтения, примерно так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int counter = 0;  //
while( !inf.eof() )
{
    counter++;
    if( counter % 2 == 1 )
    {
        // обработка нечётных строк
    }
    else
    {
        // обработка чётных строк
    }
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.02.2012, 03:12
Помогаю со студенческими работами здесь

Посимвольное считывание с файла и запись в массив
Всем привет, подскажите, правильно ли я выполняю посимвольное(Нужно считывать, не зная заранее...

Считывание строк из файла и запись в массив
Добрый день. Вопрос такой, у меня в файле находится произвольное количество строк и столбцов чисел...

Считывание массива чисел из файла и запись их в Memo
Помогите пожалуйста Есть файл, в нем в 1 столбик идет массив чисел X,кол-во элементов нам...

Считывание матрицы из файла и запись в динамический массив
Есть файл c n-количеством матриц и нужно считать их. И записать их элементы в динамические массивы...

Считывание матрицы из файла и запись в динамический массив
Подскажите, что добавить, чтобы происходило считывание массива неопределенного размера. (чтобы...

Считывание чисел из TextBox и запись в массив (CLR)
в боксе хранится строка вида: 10101000101010010001010. Как можно считать эти числа в массив int?...


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

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

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