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

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

16.07.2015, 12:33. Показов 437. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вообщем задача достаточно тривиальна, считываю таблицу из файла .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?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.07.2015, 12:33
Ответы с готовыми решениями:

Найти и удалить все одинаковые значения в коллекции файлов
Хочу найти и удалить все одинаковые файлы. Думаю мд5 и имя каждого файла записать в динамический...

Найти одинаковые значения полей в таблице
Как сформулировать sql запрос, чтобы отыскать в большой таблице строки с одинаковыми значениями...

Найти вхождения значения в одной таблице с другой
Вообщем есть две таблицы. В одной таблице №1 есть записи &quot;aaaaa&quot;, в другой таблице №2 есть записи...

Как найти номер строки найденного значения в отдельной таблице
Есть таблица и в ней нужно по условию в функции ВПР указать номер строки, например Если в строке 4...

0
16.07.2015, 12:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.07.2015, 12:33
Помогаю со студенческими работами здесь

Как отобразить значения в таблице, соответствующие коду в другой таблице
Здравствуйте. Есть три таблицы: Tbl_authors – Таблица авторов Поля: - Id_Author (первичный...

Поиск записей в одной таблице, где значения ключевого поля не совпадают с полем в другой таблице
Имеется Access XP, надо создать запрос для поиска записей в таблице ТОВАРЫ,где значения ключевого...

Поиск значения в таблице StringGrid (в неупорядоченной таблице)
Здравствуйте! Очень нужна помощь! Есть таблица StringGrid1 с данными( номер, ФИО, возраст,...

Не удается найти строку в таблице значения 1с77 - выдает, что ничего не находит, хотя запись в ТЗ есть
добрый день, не удается найти строку в таблице значения 1с77 - выдает, что ничего не находит, хотя...


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

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