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

Найти значения в таблице из файлов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Vector subscript out of range http://www.cyberforum.ru/cpp-beginners/thread1499651.html
Доброе утро, прочитал статью про векторы и решил создать один из них, однако при выводе он выдаёт ошибку: "Vector subscript out of range" , я не понимаю, где выход за пределы? Код: int N, pmas; pmas = 10; vector<int>mas; mas.reserve(pmas); for (int i = 1; i <= 9; i++) {
C++ Создание векторного изображения День добрый. Стоит задача создание изображений из текстового файла. То есть есть файл формата текст 1а текст2а текст 1б текст2б нужно получить файлы текс1а.(расширение графического формата) текст1б.(расширение графического формата) файлы представляют из себя изображение определенного размера с прозрачным фоном и текстом выровненым по правому краю на цветном фоне. http://www.cyberforum.ru/cpp-beginners/thread1499650.html
C++ Ввод данных в консоли
При вводе в консоль названия элемента, должна выводиться его плотность. Когда ввожу имена элементов первой структуры ( Fluids) и при нажатии enter, программа выводит его плотность. Беда в том, что во второй и третей структуре надо вводить имя элемента 2 и 3 раза соответственно. В чем тут дело. #include <iostream> #include <string> using namespace std; struct Fluid // структура...
C++ Два конвейера разливают и закупоривают бутылки. Определить оптимальную расстановку бутылок.
Помогите с задачей.В цеху по производству напитков работают два конвеера.На первом конвеере напиток разливается в бутылки, а во втором происходит закупорка бутылок. После схождения с конвеера очередной бутылки он сразу же поступает на следующий. Поскольку тара используеться разная, каждая бутылка имеет свое времья заполнения и времья закупорки. Написать программу для определенной...
C++ Как правильно записать условие? http://www.cyberforum.ru/cpp-beginners/thread1499617.html
как вывести правильно чтобы правильно показывало Например если: у пользователя 600 очков показывает букву D- или же 1400очков помогите как правильно записать
C++ Error C2059: синтаксическая ошибка: [ Не понимаю, почему выдает такую ошибку... Подскажите, что не так, если не сложно, заранее спасибо! void vipusk_krakena(int* Massiv, int dlina) { int n=0; while(n<50) { for (int j=0; j<4; j++) { n=rand()%(int)Massiv**+rand()%(int)Massiv**; подробнее

Показать сообщение отдельно
FRINGE
3 / 3 / 0
Регистрация: 18.12.2012
Сообщений: 49
16.07.2015, 12:33     Найти значения в таблице из файлов
Вообщем задача достаточно тривиальна, считываю таблицу из файла .csv. Значения записываю в динамический двумерный массив типа string. Ввожу два параметра, и программа должна найти значения в таблице на пересечении.
При попытке запустить пишет что переменная linedfs использована прежде чем инициализирована.
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
#include <iostream>
#include <stdafx.h>
#include <fstream>
#include <string>
using namespace std;
int CountStrings(istream &is)
{
    if (!is.good())
        return 0;
    string s;
    int nStrings=0;
    while (getline(is,s))
        ++nStrings;
    return nStrings;
}
int CountStrings(const char *name)
{
    fstream is;
    is.open(name);
    return is.good() ? CountStrings(is) : 0;
}
int CountLenght(istream &is)
{
    if (!is.good())
        return 0;
    string s;
    int nLenght=0;
    while (!(is.eof()))
        if (getline(is,s,';'))
        ++nLenght;
    return nLenght;
}
int CountLenght(const char *name)
{
    fstream is;
    is.open(name);
    return is.good() ? CountLenght(is) : 0;
}
int main()
{
    setlocale(LC_ALL,"Russian");
    fstream dfs("MSV-BD1.csv");//Открытие одного потока данных
    fstream hw("Kombi-31.csv");//открытие другого потока данных
    int stringsdfs=CountStrings("MSV-BD1.csv");//подсчет строк первого потока данных
    int stringshw=CountStrings("Kombi-31.csv");//подсчет строк второго потока данных
    //Символы в одной строке считаю как частное количества всех символов в файле на количество строк
    int lenghtdfs=CountLenght("MSV-BD1.csv")/stringsdfs+1;//подсчет символов в одной строке первого потока
    int lenghthw=CountLenght("Kombi-31.csv")/stringshw+1;//подсчет символов в одной строке второго потока
    cout <<stringsdfs<<" "<<lenghtdfs;
    cout <<stringshw<<" "<<lenghthw;
    string **basedfs=new string* [stringsdfs];
    for (int i=0;i<stringsdfs;i++){
        basedfs[i]=new string [lenghtdfs];}//создание динамического массива 
    string **basehw=new string* [stringshw];
    for (int i=0;i<stringshw;i++){
        basehw[i]=new string [lenghthw];}//создание динамического массива 
    //заполнение массива данными из файла, разделенными ';'
    for (int i=0; i<stringsdfs;i++)
    {
        for (int j=0;j<lenghtdfs;j++){
            if (j<lenghtdfs-1)//';' не ставится в конце строки. поэтому последний символ читаю так
            getline(dfs,basedfs[i][j],';');
            else
            dfs>>basedfs[i][j];}
    }//заполнение массивов данными,разделенных ';'
    for (int i=0; i<stringshw;i++)
    {
        for (int j=0;j<lenghthw;j++){
            if (j<lenghthw-1)//';' не ставится в конце строки. поэтому последний символ читаю так
            getline(hw,basehw[i][j],';');
            else
            hw>>basehw[i][j];}
    }//заполнение массивов данными БД
    cout <<"Введите значение Ду: ";
    string Du_dfs; //параметр, по которому определяю номер столбца таблицы
    do{
    cin>>Du_dfs;
    if (!(Du_dfs=="15LF" || Du_dfs=="15 LF" || Du_dfs=="15 Lf" || Du_dfs=="15lf" || Du_dfs=="15 lf" || Du_dfs=="15" || Du_dfs=="20" || Du_dfs=="25" || Du_dfs=="32" || Du_dfs=="40" || Du_dfs=="50"))
        cout <<"Такого значения не существует - проверьте правильность введенных данных \n";
    }while (!(Du_dfs=="15LF" || Du_dfs=="15 LF" || Du_dfs=="15 Lf" || Du_dfs=="15lf" || Du_dfs=="15 lf" || Du_dfs=="15" || Du_dfs=="20" || Du_dfs=="25" || Du_dfs=="32" || Du_dfs=="40" || Du_dfs=="50"));
    int rowdfs;//сам столбец 
    if (Du_dfs=="15LF" || Du_dfs=="15 LF" || Du_dfs=="15 Lf" || Du_dfs=="15lf" || Du_dfs=="15 lf")
        rowdfs=1;
    if (Du_dfs=="15")
        rowdfs=4;
    if (Du_dfs=="20")
        rowdfs=7;
    if (Du_dfs=="25")
        rowdfs=10;
    if (Du_dfs=="32")
        rowdfs=12;
    if (Du_dfs=="40")
        rowdfs=15;
    if (Du_dfs=="50")
        rowdfs=16;
    string N;
    cout <<"Введите значение N: ";
    cin>>N;
    int linedfs;
    for (int i=1;i<stringsdfs;i++)//по первому столбцу ищу это значение, если нашел хочу запомнить строку.
    {
        cout<<basedfs[i][0]<<'\n';
    }
    cout<<basedfs[linedfs][rowdfs]<<'\n';
    system("pause");
}
Проверял правильность определения количества строк и столбцов, все верно, определяет правильно.
Проверял правильность заполнения массива, проверял крайние элементы - все выдает правильно, как и в файле.
Такое ощущение что условие
C++
1
if (basedfs[i][0]==N)
он просто отказывается читать. Я даже проверял писал например
C++
1
2
3
for (int i=0 . . .)
if (basedfs[i][0]=="3,00")
...
он аналогично не выполняет это условие. Хотя я точно знаю что значение 3,00 там есть.
Помогите пожалуйста в чем может быть дело. Уже голову все сломал.

Добавлено через 1 час 4 минуты
Считаю, что проблема в этих ';'. Потому что заменяя в файлах .csv точки с запятыми на пробелы и считывая из файла следующим образом
C++
1
2
3
4
for (int i=0; i<countdfs;i++){
        for (int j=0;j<18;j++)
            dfs>>basedfs[i][j];
            }//заполнение массивов данными БД
программа работает корректно.
Что может быть не так с getline?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru