0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 43
1

Вывод данных из текстового фаила

30.09.2013, 15:30. Показов 485. Ответов 6
Метки нет (Все метки)

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


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
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string.h>
#include <iomanip>
using namespace std;
 
// Класс "Деталь"
 
class Detal{ public:
    char nazvanie[80];
    float ves;
    int kolichestvo;
    char mesto[20];
    };
 
// Класс "Стеллаж"
class Stellaj{ public:
    Detal detali[30];
    char nazvanie[20];
    char no_sklad[10];
 
 
int ReadF()
    { int i; char L[25];
    cout << "Vvedite puti k failu : ";
    gets(L);
    ifstream out_file(L, ios::out);
    if (out_file.fail()) cerr << "Error in opening stellaj.txt" << endl;
    else
    {if (!out_file.is_open()) cout << "Empty file";
    else{
     //Чтение названия stelaja
    cout << "STELAJ : ";
    if ((! out_file.eof()) && (! out_file.fail()))
    {
    out_file.getline(nazvanie, sizeof(nazvanie)) ;
    if (! out_file.fail()) cout << nazvanie << endl;}
 
        //Чтение No_склада
    cout << "SKLAD : ";
    if ((! out_file.eof()) && (! out_file.fail()))
    {
    out_file.getline(no_sklad, sizeof(no_sklad)) ;
    if (! out_file.fail()) cout << no_sklad << endl;}
 
 
ifstream input_file("L") ;
        //Чтение деталей в стелаже
    cout << endl << "----------------------------------------------------------------------------" << endl;
    cout << "No | Naimenovanie detali: | Ves: | Kol-vo :  |  Polka : " << endl;
    cout << "----------------------------------------------------------------------------" << endl;
    while ((! out_file.eof()) && (! out_file.fail()))
    {
    out_file >> detali[i].nazvanie;
    out_file >> detali[i].ves;
    out_file >> detali[i].kolichestvo;
    out_file >> detali[i].mesto;
 
    if (! out_file.fail())
    cout << setiosflags(ios::left) << setw(3) << i+1 << "| " << setw(20) << setiosflags(ios::left) << detali[i].nazvanie << " | " << setw(5) << setiosflags(ios::left) << detali[i].ves;
    cout << " | " << setw(5)<< setiosflags(ios::left) << detali[i].kolichestvo << " | " << setw(15) << setiosflags(ios::left) << detali[i].mesto << endl;
 
    i++;
    }
    cout << "----------------------------------------------------------------------------";
    if (! out_file.fail()) cout << endl << endl << "No sklada: " << no_sklad << endl;
    }
    out_file.close();
    }
    getch();
    return i;}
 
};
 
 
Stellaj *create(int n)
{   Stellaj *x;
    x=new Stellaj[n];
    return x;};
 
 
int main () {
    Stellaj g;
    int  A=100500, B=100;
    printf("PRIVET! EA TVOEA PROGA! EA HO4U RA-BO-TA-TI !! %d \n", A+B );
    g.ReadF();
    getchar();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.09.2013, 15:30
Ответы с готовыми решениями:

Пожалуйста помогите,нарисовать линию а данные брать из текстового фаила.
я сделал запись данных в файл и чтение их,остался график... unit Unit1; interface uses ...

Вывод картинки из фаила
Помогите пожалуйста вывести картинку из фаила. Использовать токлько окно BGI пишу на def-cpp...

матрица и ее ввод\вывод из фаила
Доброго дня ув. форумчане. Пожалуйста помогите исправить программу, делал в Visual Studio 2006,...

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

6
147 / 82 / 10
Регистрация: 04.09.2013
Сообщений: 261
30.09.2013, 16:22 2
пример входного файла если можно плз. но на вскидку.
проблем в разделителях между данными. Если я правильно понял то используется символ |, однако для стандартного оператора считывания из потока разделителями являются пробел и конец строки
Более того если разделитель будет " | " (вместе с пробелами), и считывается
Цитата Сообщение от LeeZa Посмотреть сообщение
out_file >> detali[i].nazvanie;
out_file >> detali[i].ves;
out_file >> detali[i].kolichestvo;
out_file >> detali[i].mesto;
То в название пойдет название, в вес символ | в количество пойдет вес и соответствено в место кажется тоже просто символ |, т.к. именно пробелы разобьют строку на составляющие.
1
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 43
30.09.2013, 21:03  [ТС] 3
В фаиле было это:
-------------

StellajZ
abc_sklad
Velosiped
3.4
2
polka7

-------------
названия стеллажа (StellajZ) и склада (abc_sklad) считались, в остальном проблемы.
0
147 / 82 / 10
Регистрация: 04.09.2013
Сообщений: 261
30.09.2013, 21:40 4
Лишний код
C++
1
ifstream input_file("L") ;
У Вас случаем прога вообще не падает когда начинает считывать детали?
Если нет - везет .
Т.к. код реально рабочий но есть одно но
При считывании деталей вы используете переменную i. Однако вы ее нигде не инициализируете, полагаясь на то что изначально автоматом она будет проинициализированна, но по факту для переменной просто выделяется память, а вот какое там значение будет - не известно. Поэтому при объявлении допишите код чтобы она иницилизировалась. например так
C++
1
2
3
...
int ReadF()
{ int i(0);...
По идее должно все заработать.
Но есть еще одна неточность.
Прога упадет, если в файле будет прописано больше чем 30 деталей.
Поэтому в цикл считывания деталей целесообразно добавить проверку
C++
1
while ((! out_file.eof()) && (! out_file.fail())&&(i<30))
1
5494 / 4889 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.09.2013, 21:45 5
Это как?
C++
1
ifstream out_file(L, ios::out);
ifstream и ios::out?
0
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 43
30.09.2013, 23:23  [ТС] 6
Благодарю за помощь!
Еще один (возможно, глупый) вопрос: можно ли как-то определить количество строк в фаиле ???
(т.к. программа выдает ошибку, как только заканчивает выполнять функцию. Думаю, нужно задать условие не до <30, а до < M, количество описанных деталеи в фаиле.
0
147 / 82 / 10
Регистрация: 04.09.2013
Сообщений: 261
30.09.2013, 23:28 7
на вскидку самый дурацкий способ прочитать их все и посчитать
но!

Цитата Сообщение от LeeZa Посмотреть сообщение
class Stellaj{ public: Detal detali[30];
Внутри самого класса у вас фиксированное количество деталей 30
поэтому и ставилось ограничение 30
Более того у вас масса ограничений на строчные данные.
отслеживайте в отладке что именно является причиной падения программы и исправляйте

Не забывайте что память не резиновая и сколько выделили под переменную столько приходится и использовать или выделять больше
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.09.2013, 23:28
Помогаю со студенческими работами здесь

Вывод данных на печать из текстового поля
Всеv доброго времени суток.... У меня есть текстовое поле в WPF сделал его мультилайнт через...

Вывод таблицы из данных текстового файла
Есть почти готовая программа: Program Table; Const size = 5; Type Data = Record ...

Вывод данных из текстового файла в Richtextbox
Здравствуйте! У меня есть форма на которой расположено 2 кнопки,по нажатию на первую кнопку...

Вывод данных из текстового файла в StringGrid
Здравствуйте, помогите новичку кодом) Имеется таблица StringGrid(фото прикреплено ниже) нужно...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru