Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
NerDo
Сообщений: n/a
#1

Правильное чтение из файла! - C++

29.04.2010, 20:27. Просмотров 1121. Ответов 1
Метки нет (Все метки)

Помогите пожалуйста, уже опробовал все(((
Суть задачи такая, есть файл data.txt в нем есть числа выглядит он так:
200,100,100,
100,
300
Ниже представлен код программы, которая просит ввести путь к файлу читает его и суммирует содержимое данного файла, сумма выводиться на экран.
Проблема в том, что программа читает первую строчку а остальные не читает.
Помогите дополнить код так чтобы были прочитаны все строчки.
Я буду очень благодарен, т.к. я сам не программист и несильно в этом разбираюсь.



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
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
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
 
using namespace std;
 
LONG Sum = 0; // Глобальная переменная для суммы элементов вектора
 
// Объявление структуры Вектор (с псевдонимом ВЕКТОР)
typedef struct Vector
{
int *data; // элементы вектора
int count; // количество элементов
} VECTOR;
 
// Функция потока
DWORD WINAPI ThreadFunc(LPVOID vect)
{
VECTOR* vec;
vec = (VECTOR*)vect;
int vecsum = 0;
for(int i = 0; i < vec->count; i++)
vecsum += vec->data[i];
InterlockedExchangeAdd(&Sum, vecsum);
}
 
int main(void)
{
VECTOR vecf, *vect; // структура для общего вектора, считанного с файла, и для массива векторов для потоков
DWORD *dwThreadIds, dwThreadsCount, dwElemInThread; //массив идентификаторов потока, кол-во потоков, кол-во элементов в потоке соответсвенно
HANDLE *hThread; //массив дескрипторов потока
FILE *hFile; // дескриптор открываемого файла
char *tmp; // строка для имени файла и для его содержимого
BOOL parity; // четность деления кол-ва потоков и кол-ва элементов
 
vecf.count = 0;
cout << "Enter full path to file" << endl << "> ";
cin >> tmp;
delete [] tmp;
 
hFile = fopen(tmp, "rt");
if (hFile == NULL)
{
cout << "Error: Invalid filename." << endl;
return 1;
}
fseek(hFile, 0, SEEK_END); // file
int fsize = ftell(hFile) + 1; // bytes
fseek(hFile, 0, SEEK_SET); // count
tmp = new char[fsize];
fgets(tmp, fsize, hFile);
for (int i = 0; tmp[i] != '\0'; i++) // подсчет запятых в строке (для подсчета элементов вектора)
if(tmp[i] == ',') vecf.count++;
vecf.data = new int[vecf.count+1]; // memory alloc for vector data ( ',' count = 5, elements count = 5+1)
cout << "Given vector: ";
vecf.count = 0;
// Разбиение строки на элементы (с использованием разделителя ",")
vecf.data[0] = atoi(strtok(tmp, ",")); // atoi - перевод строки в число
while (vecf.data[vecf.count] != '\0')
{
cout << vecf.data[vecf.count] << " ";
vecf.count++;
vecf.data[vecf.count] = atoi(strtok(NULL, ","));
}
delete [] tmp;
 
cout << endl << "Elements count: " << vecf.count << endl;
cout << "Enter threads count: " << endl << "> ";
cin >> dwThreadsCount;
if (dwThreadsCount > vecf.count)
{
cout << "Error: Enter number of threads less than number of elements." << endl;
return 2;
}
 
vect = new VECTOR[dwThreadsCount];
dwThreadIds = new DWORD[dwThreadsCount];
hThread = new HANDLE[dwThreadsCount];
if (vecf.count % dwThreadsCount == 0) // определяем, четно ли делится кол-во элементов на кол-во потоков
parity = TRUE;
else
parity = FALSE;
dwElemInThread = vecf.count / dwThreadsCount;
int offset = 0;
for (unsigned int a = 0; a < dwThreadsCount; a++)
{
if (a == 0 && parity == FALSE) vect[a].count = dwElemInThread + (vecf.count % dwThreadsCount);
else vect[a].count = dwElemInThread;
vect[a].data = new int[vect[a].count];
for (int j = 0; j < vect[a].count; j++)
vect[a].data[j] = vecf.data[j+offset];
offset += vect[a].count;
hThread[a] = CreateThread(NULL, 0, ThreadFunc, &vect[a], 0, &dwThreadIds[a]); //создание потока
}
 
WaitForMultipleObjects(dwThreadsCou nt, hThread, TRUE, INFINITE); // wait for thread ending
cout << "Sum of elements = " << Sum << endl;
for (unsigned int a = 0; a < dwThreadsCount; a++)
delete [] vect[a].data;
delete [] vecf.data;
delete [] vect;
delete [] dwThreadIds;
delete [] hThread;
fclose(hFile);
_getch();
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2010, 20:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Правильное чтение из файла! (C++):

Чтение BMP файла - C++
Пишу программу в которой необходимо считать заголовок BMP файла. Файл безпалитровый, глубина цвета 24, то есть по 8 бит каждой составляющей...

Не работает на С++ чтение с файла в сменную - C++
Всем здрасте. Я делаю курсовую. И вот такое. У меня есть структура: struct Catalog { string PName; string Pnaz; string...

OpenCV. Некорректное чтение бинарного файла - C++
Здравствуйте. При использовании opencv (2.4.6) столкнулся со следующей особенностью (или багом). Имеются бинарные файлы (fits-файлы с...

Быстрое чтение большого файла. Зависает процесс - C++
Всем доброго времени суток. Есть задача прочитать файл(1-20 мб), который состоит из слов разделённых пробелами для того, чтобы переписать...

Чтение бинарного файла в строку: читается только один байт - C++
Читаю бинарный файл в строку, но почему-то читает только 1 байт. Где здесь может быть ошибка? //ЧТЕНИЕ БИНАРНОГО ФАЙЛА В СТРОКУ FILE *f...

Чтение файла (с кракозябрами) с однобайтовой кодировкой, конвертация в UTF-8 и вывод в другой файл - C++
Добрый день, форумчане. Может у кого есть заготовка или кто поделится советом, необходимо прочитать файл (с кракозябрами) с однобайтовой...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
30.04.2010, 08:49 #2
Чтобы без лишней суеты и ритуалов с массивами :
C
1
2
3
4
do
{
    fscanf(input, "%ld", &a);
}while(fscanf(input, "%c", &c) && !feof(input));
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2010, 08:49
Привет! Вот еще темы с ответами:

Чтение файла - C++ Builder
Всем привет. Очередной раз сталкиваюсь со странностями билдера (своей тупостью?). В файл записываются файлы (картинки jpg) в формате: ...

Чтение из файла - C++ Builder
Необходимо переменной str присвоить значение всего текста в файле

Чтение файла - C++ Builder
Задача такая... Имеется текстовый файл, в котором даны массивы чисел, разделенных строкой текста,цБ: &quot;Распродажа 1 1 2 3 4 5 6 7 ...

Чтение с файла - C++ Builder
Здравствуйте! Скажите пожалуйста, как лучше переписать из файла txt данные в StringGrid используя OpenDialog(Надо ли еще использовать какую...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru