Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 23.10.2015
Сообщений: 3
1

Чтение из файла с разделителями в массив

23.10.2015, 13:33. Показов 4030. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте , возникла проблема с чтением из файла. После прочтения в массиве оказываются не те цифры если значение SIZE > 10 , программа вообще крашится при SIZE = 10 и значение правильные но не целиком если SIZE < 10 .
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <strstream>
#include <windows.h>
#include <fstream>
#include <stdio.h>
#include <cstdlib>
#include <stdlib.h>
#include <iostream>
using namespace std;
 
 
FILE *f;
int r =0;
 
char bufRus[256];
 
int main()
{
    int *arr = (int*)malloc (1070190*sizeof(int)*4);
    const int   WORDS = 3;             
    const int   SIZE = 9;              
    char        words[WORDS][SIZE];     
    ifstream    ifExcel( "file1.txt" );
    f = fopen("out.txt","w");
    ofstream fout ("out.txt"); 
 
    if( !ifExcel.fail() )
    {
        const int   nBufSize = 256;     
        char        Buffer[nBufSize];   
        while( !ifExcel.eof() )
        {
            ifExcel.getline( Buffer, nBufSize );
 
            istrstream  text( Buffer );
            int         w = 0;                                                        
            while( !text.eof() )
            {
                text.get( words[w], SIZE , ';' );    
                text.get();                         
                *(arr+(r*4)+w) = atoi(words[w]);
                         fout << *(arr+(r*4)+w) << " ";        
                w++;                
            }
            fout << endl;
            r++;
        }     
        for(int i = 0 ; i < r ; i++)
        {
                for(int j = 0 ; j < 3 ; j++)
                {
                cout << *(arr+(i*4)+j) << " ";
                }
               cout << endl;
        }
              fclose(f);      
    }  
    system("pause");
    return 0;
}
Исходный файл следующего вида вида, только в 4 миллиона строк.
Код
2430200011;3
7450200013;703
7000200014;703
2345620020;3
2634600021;3
2346200021;283
что выдаёт при значении SIZE>10.
Код
-1864767285 3 
-1139734579 703 
-1589734578 703 
-1949347276 3 
-1660367275 3 
-1948767275 283
Собственно вопрос , как впихнуть в массив данные их файла, где тут ошибка. Пишу на с++ под Dev-C++.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.10.2015, 13:33
Ответы с готовыми решениями:

Чтение из файла с разделителями
Всем доброго времени суток. Вопрос по чтению из CSV файла с разделителями Структура файла...

Чтение файла *.CSV с разделителями(;)
Всем привет. Столкнулся с такой проблемой: using (StreamReader rd = new StreamReader(new...

Чтение из текстового файла с разделителями
Здравствуйте! У меня 2 вопроса: Как можно вывести текст на html странице из текстового файла...

Построчное чтение txt файла с разделителями
Здравствуйте есть некий файл в котором находятся строки c разделителем (:) задача заключается в...

6
Dimension
594 / 462 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
23.10.2015, 13:36 2
инт больше 10 цифр не вместит ,нужно изменить тип
0
0 / 0 / 0
Регистрация: 23.10.2015
Сообщений: 3
23.10.2015, 13:44  [ТС] 3
Цитата Сообщение от Dimension Посмотреть сообщение
инт больше 10 цифр не вместит ,нужно изменить тип
На какой ? И меня вполне устраивает 10 цифр но программа на них крашится.
0
7791 / 6558 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
23.10.2015, 13:54 4
Лучший ответ Сообщение было отмечено Alamedas как решение

Решение

23-ю и 55-ю строки убрать. int заменить на long long int.
C++
1
2
3
4
5
6
7
            while( !text.eof() )
            {
                text >> *(arr+(r*4)+w);
                text.get();                         
                fout << *(arr+(r*4)+w) << " ";        
                w++;                
            }
1
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
23.10.2015, 13:55 5
Alamedas, вместо int попробуйте unsigned, у вас вроде выход за диапазон. И еще, а какой смысл в целых числах? Для вашей задачи (смысл которой, судя по коду, заменить ";" на пробел и вывести значения на консоль) и строки вполне должны сойти.
1
0 / 0 / 0
Регистрация: 23.10.2015
Сообщений: 3
23.10.2015, 14:23  [ТС] 6
23-ю и 55-ю строки убрать. int заменить на long long int.
Код C++Выделить код
C++
1
2
3
4
5
6
7
            while( !text.eof() )
            {
                text >> *(arr+(r*4)+w);
                text.get();                         
                fout << *(arr+(r*4)+w) << " ";        
                w++;                
            }
Спасибо большое, всё заработало.
Alamedas, вместо int попробуйте unsigned, у вас вроде выход за диапазон. И еще, а какой смысл в целых числах? Для вашей задачи (смысл которой, судя по коду, заменить ";" на пробел и вывести значения на консоль) и строки вполне должны сойти.
Тут изложена не вся задача, дальше надо будет проводить сравнения по второй колонке и складывать или вычитать строки из первой колонки.
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
23.10.2015, 14:35 7
Цитата Сообщение от Alamedas Посмотреть сообщение
Тут изложена не вся задача
Задача не изложена в принципе Но раз уж нужно будет сравнивать, то согласен, нужны числа.
0
23.10.2015, 14:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.10.2015, 14:35
Помогаю со студенческими работами здесь

Чтение данных из произвольного файла с разделителями
Помогите пожалуйста. Нужно написать программу консольного типа, реализующую: 1. Чтение файла 2....

Excel чтение txt таблицы с tab разделителями
помогите считать фаил txt таблицы с текстами разделенными \t , полазил по форумам ничего понятного...

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

Вывод в DataGridView из файла с разделителями
string str; string str1 = File.ReadAllText(@&quot;polz.txt&quot;).Split('\n'); int...


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

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