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

Чтение текстового файла - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 80, средняя оценка - 4.90
HappyAndRu
13 / 13 / 2
Регистрация: 19.05.2012
Сообщений: 44
23.07.2012, 19:52     Чтение текстового файла #1
Всем привет. Не могу понять как читать из текстового файла значения разных типов. Вот мне например нужно считать файл с таким содержанием:
4
Sam Stone
2000
Freida Flass
100500
Tammy Tubbs
5000
Rich Raptor
55000

Строки должны записываться в массив char или в string, а числа в double. Первые значения нормально выдает, а дальше кракозябры. Подскажите пожалуйста как решить эту проблему. Заранее спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ilya-punk
4 / 4 / 0
Регистрация: 14.07.2012
Сообщений: 27
23.07.2012, 20:17     Чтение текстового файла #2
Считывай всё как char *, а потом проверяй по коду каждый символ. Если у какого то символа код от 48 до 57, то этот символ - цифра. Вот тебе функция, которая конвертирует.
C++
1
2
3
4
5
6
7
8
int IntToStr(char * str)
{
       stringstream ss;
       ss<<str;
       int r;
       ss>>r;
       return r;
}
PreFX
25 / 20 / 1
Регистрация: 14.07.2012
Сообщений: 176
23.07.2012, 20:28     Чтение текстового файла #3
Возможно, дело в том, что вы считываете всё с использованием >>, однако этот оператор считывает файлы только до пробела, т. е. для чтения строки "Sam Stone" требуется два раза применить этот оператор.
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
23.07.2012, 20:54     Чтение текстового файла #4
Я бы на твоём месте считывал всё в string; а затем смотрел, какого типа переменную ты считал; вот здесь программа для распознавания типов.
Определение введенного типа
HappyAndRu
13 / 13 / 2
Регистрация: 19.05.2012
Сообщений: 44
24.07.2012, 00:31  [ТС]     Чтение текстового файла #5
Спасибо за советы, но вариант с конвертацией мне не подходит, должно считывать все сразу в свои переменные. Вот выкладываю свой код, а то я замучался уже, помогите подправить пожалуйста.
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
#include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>
 
using namespace std;
 
int main()
{
    struct mans
    {
       string name;
       double money;
    };
    
    fstream file;
    int number;
    double n;
    file.open("A.txt");
    file >> number;
  
    mans *p = new mans[number];
    getline(file,p -> name); 
    for (int i=0; i<number; i++)
    {
      getline(file,p -> name);
      file >> p -> money;
      p++;
    }
    p = p - number;
    
    for (int i = 0; i < number; i++)
    {
      cout << "Name: " << p -> name << endl;
      cout << "Money: " << p -> money << endl;
      p++;
    }
 
    system ("pause");
    return 0;
}
Вот результат:
Миниатюры
Чтение текстового файла  
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.07.2012, 00:38     Чтение текстового файла #6
C++
1
2
3
4
5
for (int i = 0; i < number; i++)
{
      getline(file,p[i].name);
      file >> p[i].money;
}
HappyAndRu
13 / 13 / 2
Регистрация: 19.05.2012
Сообщений: 44
24.07.2012, 00:47  [ТС]     Чтение текстового файла #7
Ну теперь вообще не работает) Это же динамическая структура и такая форма обращения к членам вообще не подходит или я ошибаюсь?
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
24.07.2012, 00:59     Чтение текстового файла #8
формат файла - строго определен, или нужно "умно распознавать", что в строке имеется ввиду?
HappyAndRu
13 / 13 / 2
Регистрация: 19.05.2012
Сообщений: 44
24.07.2012, 01:03  [ТС]     Чтение текстового файла #9
Строго определен, первая строка это int, дальше чередуется string и double.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.07.2012, 01:10     Чтение текстового файла #10
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 <string>
 
#define FILENAME "input.txt"
 
struct mans
{
    std::string name;
    double money;
};
 
int main()
{
    std::ifstream file(FILENAME);
 
    if (!file.is_open())
    {
        std::cout << "cannot open file: " << FILENAME;
        return 1;
    }
 
    std::size_t size = 0;
    (file >> size).get();
    
    mans* p = new mans[size]();
 
    for (std::size_t i = 0; i < size; ++i)
    {
        std::getline(file, p[i].name);
        (file >> p[i].money).get();
    }
 
    for (std::size_t i = 0; i < size; ++i)
        std::cout << p[i].name << '\t' << p[i].money << std::endl;
 
    delete [] p;
 
    return 0;
}
HappyAndRu
13 / 13 / 2
Регистрация: 19.05.2012
Сообщений: 44
24.07.2012, 01:19  [ТС]     Чтение текстового файла #11
Ура! Все работает. Большое спасибо!
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
24.07.2012, 01:39     Чтение текстового файла #12
HappyAndRu, боюсь вас разачаровать, но если кто-то залезет в "A.txt" и своими толстыми пальцами прикола ради после, например, 2000 натычет несколько пробелов, то вся затея насмарку- код не сработает. А он должен работать.

как-то так надо:
C++
1
2
3
4
5
6
7
    for (std::size_t i = 0; i < size; ++i)
    {
        std::string temp;
        std::getline(file, p[i].name);
        file >> p[i].money;
        std::getline(file, temp);
    }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2012, 02:01     Чтение текстового файла
Еще ссылки по теме:

Чтение из текстового файла C++
Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла. C++
C++ Чтение из текстового файла

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

Или воспользуйтесь поиском по форуму:
HappyAndRu
13 / 13 / 2
Регистрация: 19.05.2012
Сообщений: 44
24.07.2012, 02:01  [ТС]     Чтение текстового файла #13
Да, действительно, спасибо.
Yandex
Объявления
24.07.2012, 02:01     Чтение текстового файла
Ответ Создать тему
Опции темы

Текущее время: 11:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru