Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Считывание массива из xls файла, массивы многомерные 
:(
    Опции темы
saidmir
Дата 29.6.2010, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 12.6.2010

Репутация: нет
Всего: нет



Доброго времени суток

У меня такой вопрос
возможно ли считать все лист csv  в массив и потом работать с этим csv  как у же с массивом
иметься поля даты и времени как сохранить эти поля без изменения типа данных 

пишу под Win  


как сортировать и отбойку делать в массиве разобрался теперь вот только xls  файл надо туда подключить 

помогите кодом кто может 

Это сообщение отредактировал(а) saidmir - 29.6.2010, 17:58
PM MAIL   Вверх
vnf
Дата 29.6.2010, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 9.2.2008

Репутация: нет
Всего: 1



так xls или csv? csv легкий текстовый формат, xls намного сложнее
PM MAIL   Вверх
saidmir
Дата 29.6.2010, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 12.6.2010

Репутация: нет
Всего: нет



Цитата(vnf @ 29.6.2010,  19:54)
так xls или csv? csv легкий текстовый формат, xls намного сложнее

Подключить csv файл.
Создать на основе этого файла массив размерностью 5 на 3000 

там время ест и дата 
Я просто с файлами не разу не работал 
поэтому спрашиваю

как выборку сделать в принципе понятно 

только пока не понятно как подключить такой фаил к программе 

а так первая под задача звучит вот так 

________________________________________________________
Подключить csv файл.
Создать на основе этого файла массив размерностью 5 на 3000 

Первый столбец -- действие (загрузка или разгрузка)
Второй столбец -- автосамосвал
Третий столбец -- пункт разгрузки
Четвертый столбец -- врнемя начала действия
Пятый столбец -- конец действие 
Шестой столбец -- разница между временем начала и конца

Оттобрать из первого столбца + 
сформировать масив из этих плюсов
Отобрать из массива -
сформироват массив из этих минусов
_______________________________________________________

все что красным пока не ясно 

Спасибо 

PM MAIL   Вверх
xvr
Дата 30.6.2010, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(saidmir @  29.6.2010,  20:31 Найти цитируемый пост)
Подключить csv файл.

fopen + fgets/fscanf + fclose
или
ifstream + ifstream::operator << 


Цитата(saidmir @  29.6.2010,  20:31 Найти цитируемый пост)
Создать на основе этого файла массив размерностью 5 на 3000 

создать масив (malloc или new или vector<string[5]>)
прочесть в него построчно из файла (см. предыдущий пункт)

Цитата(saidmir @  29.6.2010,  20:31 Найти цитируемый пост)
сформировать масив из этих плюсов

создать новый массив, последовательно перебрать старый, сравнить old_array[i][0] == "+" (или strcmp(old_array[i][0],"+")==0), если совпало - добавить строку в новый

Цитата(saidmir @  29.6.2010,  20:31 Найти цитируемый пост)
сформироват массив из этих минусов

аналогично


Это сообщение отредактировал(а) xvr - 30.6.2010, 13:33
PM MAIL   Вверх
saidmir
Дата 2.7.2010, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 12.6.2010

Репутация: нет
Всего: нет



Цитата(xvr @ 30.6.2010,  13:33)
Цитата(saidmir @  29.6.2010,  20:31 Найти цитируемый пост)
Подключить csv файл.

fopen + fgets/fscanf + fclose
или
ifstream + ifstream::operator << 


Цитата(saidmir @  29.6.2010,  20:31 Найти цитируемый пост)
Создать на основе этого файла массив размерностью 5 на 3000 

создать масив (malloc или new или vector<string[5]>)
прочесть в него построчно из файла (см. предыдущий пункт)

Цитата(saidmir @  29.6.2010,  20:31 Найти цитируемый пост)
сформировать масив из этих плюсов

создать новый массив, последовательно перебрать старый, сравнить old_array[i][0] == "+" (или strcmp(old_array[i][0],"+")==0), если совпало - добавить строку в новый

Цитата(saidmir @  29.6.2010,  20:31 Найти цитируемый пост)
сформироват массив из этих минусов

аналогично

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

вот такой фаил надо подкрепить и создать на него массив 

если вам не сложно то помогите с кодом 

заранее спасибо 

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  events.csv.zip 30,68 Kb
PM MAIL   Вверх
xvr
Дата 2.7.2010, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(saidmir @  2.7.2010,  20:03 Найти цитируемый пост)
простите пожалуйста, а вы бы не могли написать кусочек скрипта который бы наглядно показал какие библиотеки и как присоеденять csv  фаил и как создать массив на него 
Это в центр помощи


PM MAIL   Вверх
saidmir
Дата 2.7.2010, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 12.6.2010

Репутация: нет
Всего: нет



Цитата(xvr @ 2.7.2010,  20:27)
Цитата(saidmir @  2.7.2010,  20:03 Найти цитируемый пост)
простите пожалуйста, а вы бы не могли написать кусочек скрипта который бы наглядно показал какие библиотеки и как присоеденять csv  фаил и как создать массив на него 
Это в центр помощи

простите а где это ?
PM MAIL   Вверх
saidmir
Дата 3.7.2010, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 12.6.2010

Репутация: нет
Всего: нет



привет всем 

покопался в справках и вот что придумал

1 создать структуру с разными типами которые имеються в файле а потом в нее считывать файл или глупо как вы думаете?
PM MAIL   Вверх
toxx
Дата 3.7.2010, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: 4
Всего: 13



saidmir
если тебе понятно, то не глупо
PM MAIL   Вверх
xvr
Дата 3.7.2010, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(saidmir @  2.7.2010,  21:28 Найти цитируемый пост)
простите а где это ? 
 http://forum.vingrad.ru/forum/Vingrad-help-center.html

Цитата

1 создать структуру с разными типами которые имеються в файле
У вас в файле только строки, там нет 'разных типов'

Цитата(saidmir @  3.7.2010,  08:30 Найти цитируемый пост)
а потом в нее считывать файл
И на лету преобразовывать в нужные типы

Цитата(saidmir @  3.7.2010,  08:30 Найти цитируемый пост)
или глупо как вы думаете?
нормально, вот только это даже не верхушка айсберга, это скорее маленькая птичка, которая на этой верхушке сидит  smile 

PM MAIL   Вверх
saidmir
Дата 3.7.2010, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 12.6.2010

Репутация: нет
Всего: нет



как я понял мне надо тут использовать  библиотеку fstream  

примерно так http://ruseti.ru/book6/Glava%204/Index5.htm

или тут это не подойдет? 


PM MAIL   Вверх
xvr
Дата 3.7.2010, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(saidmir @  3.7.2010,  16:29 Найти цитируемый пост)
или тут это не подойдет? 
Подойдет. Тут за вас сделали 90% работы  smile 


PM MAIL   Вверх
saidmir
Дата 3.7.2010, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 12.6.2010

Репутация: нет
Всего: нет



вроде как с подключением разобрался 

Код

#include <iostream>
#include <fstream>
using namespace std;
int main () {
    ifstream input_file("events.csv");
    for (int j=0;j<4;j++){
        for (int i=0;i<3;i++){
            char one[1000];
            input_file>>one;
            cout<<one<<";";
        };
        cout<<"\n";
    };
    cout<<"\n";
}


выдает вот, что:

saidmir@alexmertvdesktop:~/proga/240610-1$ g++ sa.cpp -o sa
saidmir@alexmertvdesktop:~/proga/240610-1$ ./sa
N;206;���-1;23.06.2010;20:09:24;23.06.2010;20:10:26;0:01:02;;,;
+;304;37;23.06.2010;20:09:42;23.06.2010;20:11:02;0:01:19;;,;
N;208;���-1;23.06.2010;20:09:33;23.06.2010;20:11:36;0:02:02;;,;
N;411;���;23.06.2010;20:09:32;23.06.2010;20:12:32;0:03:00;;,;



а вот когда так:

Код

#include <iostream>
#include <fstream>
using namespace std;
int main () {
    ifstream input_file("events.csv");
    for (int j=0;j<4;j++){
        for (int i=0;i<2;i++){
            char one[1000];
            input_file>>one;
            cout<<one<<";";
        };
        cout<<"\n";
    };
    cout<<"\n";
}


вот, что:

saidmir@alexmertvdesktop:~/proga/240610-1$ g++ sa.cpp -o sa
saidmir@alexmertvdesktop:~/proga/240610-1$ ./sa
N;206;���-1;23.06.2010;20:09:24;23.06.2010;
20:10:26;0:01:02;;,;+;304;37;23.06.2010;
20:09:42;23.06.2010;20:11:02;0:01:19;;,;
N;208;���-1;23.06.2010;20:09:33;23.06.2010;


не понятно по чему когда вот так он не читает всю строку 

Код

#include <iostream>
#include <fstream>
using namespace std;
int main () {
    ifstream input_file("events.csv");
    for (int j=0;j<1;j++){
        for (int i=0;i<1;i++){
            char one[1000];
            input_file>>one;
            cout<<one<<";";
        };
        cout<<"\n";
    };
    cout<<"\n";
}



а читает только ее часть 

saidmir@alexmertvdesktop:~/proga/240610-1$ ./sa
N;206;���-1;23.06.2010;


отсюда вывод буду использовать первый скрипт для чтения из файла 
только как оно будет проверяться на + и - пока не ясно может так же в цикле но пока не пробовал  smile 
PM MAIL   Вверх
bsa
Дата 4.7.2010, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



мда... кто так делает?
вместо char one[1000] следует использовать std::string one
вместо input_file >> one следует использовать std::getline(input_file, one);
циклы убираешь, так как ты не знаешь заранее сколько данных в csv. вместо них будет один цикл:
Код
std::ifstream ifile("events.csv");
if (!ifile.is_open())
   throw std::runtime_error("Failed to open file");
std::string line;
typedef std::vector<std::string> StringVector;
typedef std::vector<StringVector> SvVector;
SvVector data;
while(std::getline(ifile, line)) {
   data.push_back(StringVector()); //создаем новую строку
   StringVector &sv = data.back(); //sv - ссылка на созданную строку
   for(std::string::size_type pos = 0; ; ++pos) {
       std::string::size_type npos = line.find(';', pos); //ищем следующую точку с запятой
       if (npos != std::string::npos) //если нашли
          sv.push_back(line.substr(pos, npos - pos)); //то добавляем то, что между ними
       else {
          sv.push_back(line.substr(pos, std::string::npos)); //иначе добавляем все, что за последней точкой с запятой и до конца строки
          break;
       }
       pos = npos;
   }
}
//здесь data будет содержать все ячейки таблицы (доступ: data[row][col])
//правда, количество столбцов может отличаться от строки к строке

PM   Вверх
saidmir
Дата 5.7.2010, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 12.6.2010

Репутация: нет
Всего: нет



Цитата(bsa @ 4.7.2010,  22:33)
мда... кто так делает?
вместо char one[1000] следует использовать std::string one
вместо input_file >> one следует использовать std::getline(input_file, one);
циклы убираешь, так как ты не знаешь заранее сколько данных в csv. вместо них будет один цикл

Простите но это у меня выдало кучу ошибок 
порывшись в книгах и в сети на шел вот такую вещь 
считывая из файла csv  проверяя сразу на + и - и на N  записывая эти строки в свои файлы 

Вот такой код 
Код


#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
int main () {
    FILE *file; FILE *plus;    FILE *minus; FILE *N;
    file=fopen("events.csv","r");
    plus=fopen("plus.dat","w");
    minus=fopen("minus.dat","w");
    N=fopen("N.dat","w");
    char l,m;
    
    while(!feof(file)){
        if(fscanf(file,"%s",&l)=='+'){
            while(fscanf(file,"%s",m)!=',')fprintf(minus,"%s",fscanf(file,"%s",&l));
        }
    if(fscanf(file,"%s",&l)=='-'){
            while(fscanf(file,"%s",m)!=',')fprintf(minus,"%s",fscanf(file,"%s",&l));
        }
    if(fscanf(file,"%s",&l)=='N'){
            while(fscanf(file,"%s",m)!=',')fprintf(minus,"%s",fscanf(file,"%s",&l));
        }
    }
}



Но в чем тут дело 
работает вот так точнее не работает 


saidmir@alexmertvdesktop:~/proga/240610-1$ g++ sa1.cpp -o sa1
sa1.cpp: In function ‘int main()’:
sa1.cpp:15: warning: format ‘%s’ expects type ‘char*’, but argument 3 has type ‘int’
sa1.cpp:15: warning: format ‘%s’ expects type ‘char*’, but argument 3 has type ‘int’
sa1.cpp:18: warning: format ‘%s’ expects type ‘char*’, but argument 3 has type ‘int’
sa1.cpp:18: warning: format ‘%s’ expects type ‘char*’, but argument 3 has type ‘int’
sa1.cpp:21: warning: format ‘%s’ expects type ‘char*’, but argument 3 has type ‘int’
sa1.cpp:21: warning: format ‘%s’ expects type ‘char*’, but argument 3 has type ‘int’
saidmir@alexmertvdesktop:~/proga/240610-1$ ./sa1
Ошибка сегментирования
saidmir@alexmertvdesktop:~/proga/240610-1$ 



Все файлы созданы но в чем прикол так и не понятно они пусты

Прошу помогите кто может 

Книгу нашел потихоньку читаю но как тут быть не знаю 

помогите пожалуйста 

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

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

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1051 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.