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

Есть массив в виде табличных данных, как его поделить на отдельные элементы для дальнейшей работы?

16.12.2014, 18:50. Показов 1294. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть массив в виде табличных данных,как его поделить на отдельные элементы для работы дальше?строка разделена ";",нужен кусочек тот которой делить)

побывал считать через getline,успехом не увенчалось

код:
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
#include <stdio.h>
#include <stdlib.h>
 
int main () {
  FILE * pFile;
  long lSize;
  char * buffer;
  size_t result;
  int i;
 
  pFile = fopen ( "D:\\1.csv" , "rb" );
  if (pFile==NULL) {fputs ("File error",stderr); system("pause"); exit (1);}
 
  
  fseek (pFile , 0 , SEEK_END);
  lSize = ftell (pFile);
  rewind (pFile);
 
 
  buffer = (char*) malloc (sizeof(char)*lSize);
  if (buffer == NULL) {fputs ("Memory error",stderr); system("pause"); exit (2);}
 
 
  result = fread (buffer,1,lSize,pFile);
 
  
  if (result != lSize) {fputs ("Reading error",stderr); system("pause"); exit (3);}
 
 
 
  printf (buffer);
 
 
  fclose (pFile);
  free (buffer);
  system("pause");
//  return 0;
}
Добавлено через 1 час 48 минут
есть кто сможет помочь?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.12.2014, 18:50
Ответы с готовыми решениями:

Как вернуть массив обьектов для дальнейшей работы с ним?
#include &lt;iostream&gt; class Ex { public: Ex(char *);//конструктор ~Ex();//деструктор...

Считать числа из файла в массив для дальнейшей работы с ними
дан файл, в котором записаны данные: X 1 2 35 41 5 63 7 80 нужно считать ЧИСЛА из файла в...

Массив: Приложение по составлению списков товаров для дальнейшей работы с этим списком
Всем добрый день. Недавно начал изучать Vue.js. Фреймворк очень понравился. На данный момент...

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

14
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,718
16.12.2014, 18:59 2
Если это числа, то читайте сразу в массив действительных переменных.
0
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 58
16.12.2014, 19:53  [ТС] 3
Цитата Сообщение от zss Посмотреть сообщение
Если это числа, то читайте сразу в массив действительных переменных.
там не только числа

пример:
12313;12;braf;28.10.14;gima
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
16.12.2014, 21:19 4
Цитата Сообщение от ebywku Посмотреть сообщение
пример:
12313;12;braf;28.10.14;gima
Извлечь что нужно из этой строки?
0
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 58
16.12.2014, 23:37  [ТС] 5
Цитата Сообщение от lss Посмотреть сообщение
Извлечь что нужно из этой строки?
35726688841;in ;BPGW41;28.11.2014 02:38:31;5738233024;380567662445;31
5 и 6-ое
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
17.12.2014, 00:18 6
В этой строке, где 5-е и 6-е?
Цитата Сообщение от ebywku Посмотреть сообщение
пример:
12313;12;braf;28.10.14;gima
Строки в файле разные по количеству частей? Или что?
0
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 58
17.12.2014, 00:56  [ТС] 7
Цитата Сообщение от lss Посмотреть сообщение
В этой строке, где 5-е и 6-е?

Строки в файле разные по количеству частей? Или что?
это я приводил как пример,а это строка из задачи:
35726688841;in ;BPGW41;28.11.2014 02:38:31;5738233024;380567662445;31

такая же есть в другом файле

35721437703;out;1177;28.11.2014 02:38:34;5738233024;380567662445;31.029


и по общему критерию их нужно объединить
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
17.12.2014, 01:17 8
Лучший ответ Сообщение было отмечено ebywku как решение

Решение

Цитата Сообщение от ebywku Посмотреть сообщение
а это строка из задачи:
35726688841;in ;BPGW41;28.11.2014 02:38:31;5738233024;380567662445;31
Если в файле такая строка:
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
#include <iostream>
#include <fstream>
#include <cstdlib>
 
using namespace std;
 
int main()
{
    ifstream fin("file.txt");
    if (!fin)
        cout << "Error!" << endl;
    else
    {
        char temp[255];
        for (int i = 0; i < 4; ++i)
            fin.getline(temp, 255, ';');
        long long a, b;
        fin >> a;
        fin.get();
        fin >> b;
        (fin >> temp).get();
        cout << a << ' ' << b << endl;
    }
 
    system("pause");
    return 0;
}
Миниатюры
Есть массив в виде табличных данных, как его поделить на отдельные элементы для дальнейшей работы?  
1
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
17.12.2014, 12:25 9
Что молчим? Код для кого выложен?
0
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 58
17.12.2014, 12:47  [ТС] 10
Цитата Сообщение от lss Посмотреть сообщение
Что молчим? Код для кого выложен?
Ваш код работает идеально,но у меня массив из таких строк,вернее два массива,по этому и молчу, думаю как применить к своей программе ваш код)
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
17.12.2014, 14:51 11
Цитата Сообщение от ebywku Посмотреть сообщение
у меня массив из таких строк
Имеется ввиду, несколько подобных строк в файле? Если из всех строк нужно извлечь 5-е и 6-е, то тогда то же, что у меня, но чтение в цикле (после чтнеия одной строки, курсор будет стоять на начале следующей). Общая задача туманна, поэтому более конкретно ничего сказать не могу.
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
17.12.2014, 15:12 12
Например:
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
#include <iostream>
#include <fstream>
#include <vector>
#include <utility>
#include <cstdlib>
 
using namespace std;
 
int main()
{
    ifstream fin("file.txt");
    if (!fin)
        cout << "Error!" << endl;
    else
    {
        vector <pair<long long, long long > > v;
        char temp[255];
        while (true)
        {
            for (int i = 0; i < 4; ++i)
                fin.getline(temp, 255, ';');
            if (fin)
            {
                long long a, b;
                (fin >> a).get();
                (fin >> b).get();
                (fin >> temp).get();
                v.push_back(make_pair(a, b));
            }
            else
                break;
        }
        
        for (int i = 0; i < v.size(); ++i)
            cout << v[i].first << ' ' << v[i].second << endl;
    }
 
    system("pause");
    return 0;
}
В файле:
35726688841;in ;BPGW41;28.11.2014 02:38:31;5738233024;380567662445;31
35726688842;inn ;BPGW42;29.11.2014 02:38:31;5738233025;380567662446;32
35726688843;innn ;BPGW43;30.11.2014 02:38:31;5738233026;380567662447;33
35726688844;innnn ;BPGW44;1.12.2014 02:38:31;5738233027;380567662448;34
Миниатюры
Есть массив в виде табличных данных, как его поделить на отдельные элементы для дальнейшей работы?  
0
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 58
17.12.2014, 19:55  [ТС] 13
вот подробней:

Есть два файла,количество записей не ограничено.
в одном виду :
35726688841;in ;BPGW41;28.11.2014 02:38:31;5738233024;380567662445;31
во втором:
35721437703;out;1177;28.11.2014 02:38:34;5738233024;380567662445;31.029


Это строка имеет один и тот же смысл,но может отличаться в некоторых параметрах,таких как время,тип и т.д.
их нужно соединить в одну строку,по параметрам которые схожие например телефонный(я их выделали желтым) .
в итоге должно получиться приблизительно :

35726688841;35721437703;in;out ;BPGW41;1177;28.11.2014 2:38;28.12.2014 2:38;5738233024;380567662445;31;31.029


http://rghost.ru/59742765 - вот файлы для теста
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
17.12.2014, 23:40 14
Лучший ответ Сообщение было отмечено ebywku как решение

Решение

Например, так:
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
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <cstdlib>
 
using namespace std;
 
bool readStr(ifstream& fin, vector <string>& vstr)
{
    string temp;
    
    for (int i = 0; i < 4; ++i)
    {
        getline(fin, temp, ';');
        if (fin)
            vstr.push_back(temp);
        else
            return false;
    }
        
    for (int i = 0; i < 2; ++i)
    {
        getline(fin, temp, ';');
        vstr.push_back(temp);
    }
    getline(fin, temp);
    vstr.push_back(temp);
 
    return true;
}
 
void printNewStr(vector <string>& vstr1, vector <string>& vstr2)
{
    cout << vstr1[0] << ';' << vstr2[0] << ';'
         << vstr1[1] << ';' << vstr2[1] << ';'
         << vstr1[2] << ';' << vstr2[2] << ';'
         << vstr1[3] << ';' << vstr2[3] << ';'
         << vstr1[4] << ';' << vstr1[5] << ';'
         << vstr1[6] << ';' << vstr2[6] << endl;
}
 
int main()
{
    ifstream fin1("1.csv");
    ifstream fin2("2.csv");
    if (!fin1 || !fin2)
    {
        cout << "Error!" << endl;
        system("pause");
        return 0;
    }
   
    vector <string> vstr1;
    vector <string> vstr2;
 
    while (readStr(fin1, vstr1))
    {
        while (readStr(fin2, vstr2))
        {
            if (vstr1[4] == vstr2[4] && vstr1[5] == vstr2[5])
            {
                printNewStr(vstr1, vstr2);
                vstr2.clear();
            }
            else
            {
                vstr2.clear();
                continue;
            }
        }
        fin2.clear();
        fin2.seekg(0);
        vstr1.clear();
    }
   
    system("pause");
    return 0;
}
1
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 58
18.12.2014, 00:39  [ТС] 15
Цитата Сообщение от lss Посмотреть сообщение
Например, так:
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
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <cstdlib>
 
using namespace std;
 
bool readStr(ifstream& fin, vector <string>& vstr)
{
    string temp;
    
    for (int i = 0; i < 4; ++i)
    {
        getline(fin, temp, ';');
        if (fin)
            vstr.push_back(temp);
        else
            return false;
    }
        
    for (int i = 0; i < 2; ++i)
    {
        getline(fin, temp, ';');
        vstr.push_back(temp);
    }
    getline(fin, temp);
    vstr.push_back(temp);
 
    return true;
}
 
void printNewStr(vector <string>& vstr1, vector <string>& vstr2)
{
    cout << vstr1[0] << ';' << vstr2[0] << ';'
         << vstr1[1] << ';' << vstr2[1] << ';'
         << vstr1[2] << ';' << vstr2[2] << ';'
         << vstr1[3] << ';' << vstr2[3] << ';'
         << vstr1[4] << ';' << vstr1[5] << ';'
         << vstr1[6] << ';' << vstr2[6] << endl;
}
 
int main()
{
    ifstream fin1("1.csv");
    ifstream fin2("2.csv");
    if (!fin1 || !fin2)
    {
        cout << "Error!" << endl;
        system("pause");
        return 0;
    }
   
    vector <string> vstr1;
    vector <string> vstr2;
 
    while (readStr(fin1, vstr1))
    {
        while (readStr(fin2, vstr2))
        {
            if (vstr1[4] == vstr2[4] && vstr1[5] == vstr2[5])
            {
                printNewStr(vstr1, vstr2);
                vstr2.clear();
            }
            else
            {
                vstr2.clear();
                continue;
            }
        }
        fin2.clear();
        fin2.seekg(0);
        vstr1.clear();
    }
   
    system("pause");
    return 0;
}


работает отлично,главное быстро,а как обратно сохранить в csv файл?так же как в текстовый?
и можно ваши коментарии (кратко) по поводу функции что б понимать что к чему)
0
18.12.2014, 00:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.12.2014, 00:39
Помогаю со студенческими работами здесь

Как спланировать обучение для дальнейшей работы в SEO ?
Решил полностью поменять область деятельности и углубиться в изучении и практике поискового...

Как получить имя файла для дальнейшей работы с этим файлом?
Есть программа в которой используются функции GetOpenFile() и GetSaveFile() для открытия и...

Как можно получить данные из файла .dot для дальнейшей работы
Здравствуйте, уважаемые! Помогите пожалуйста! Как можно выцепить данные из файла .dot для...

Как реализовать выбор строк таблицы посредством CheckBox для дальнейшей работы с этими строками? (как в phpMyAdmin)
Как реализовать выбор строк таблицы посредством CheckBox для дальнейшей работы с этими строками?...

Как можно поделить изображение на отдельные частицы?
Подскажите пожалуйста, как можно поделить изображение на отдельные частицы,чтобы были с вырезами...

Как записать данные из аякс-запроса в PHP скрипт для дальнейшей работы с ними?
Сам запрос: $.get('test.php', {login: &quot;admin&quot;, ID: 01}); $('html').load('test.php');


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

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