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

чтение данных с файла. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.77
warloc69
78 / 78 / 4
Регистрация: 28.10.2011
Сообщений: 219
28.10.2011, 22:43     чтение данных с файла. #1
в общем у меня есть файл. в нем с начала идет строка указывающая путь к некому файлу. потом разношерстные циферки,
каким образом мне можно прочитать эту строку из файла в переменную. пробовал вот както так :
C++
1
2
3
4
FILE * f;
char * path;  
fopen_s(f,"file.txt","r");
fscanf_s(f,"%s",path);
вот только переменную path нужно перед этим инициализировать например так
C++
1
path = new char[100];
но каким размером его инициализировать не известно. Возьмом маленькое число элементов и получим переполнение в масиве, возьмом большое и получим занятую лишнюю память.
у кого есть какие идеи???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2011, 22:43     чтение данных с файла.
Посмотрите здесь:

Чтение данных из файла C++
C++ Чтение данных из файла
Чтение данных из файла C++
чтение данных из файла C++
C++ Чтение данных из файла
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
28.10.2011, 23:08     чтение данных с файла. #2
если тебе жалко память но плевать на быстродействие используй
fgetc
reealoc

читаешь файл пока не встретишь цифру и вместе с этим изменяешь границу памяти
warloc69
78 / 78 / 4
Регистрация: 28.10.2011
Сообщений: 219
28.10.2011, 23:35  [ТС]     чтение данных с файла. #3
Цитата Сообщение от Van111 Посмотреть сообщение
если тебе жалко память но плевать на быстродействие используй
fgetc
reealoc

читаешь файл пока не встретишь цифру и вместе с этим изменяешь границу памяти
по символьно файл можно читать и через fscanf_s(f,"%c",simvol);
насколько я понял для использования reealoc нужно память выделять malloc а это устаревшый метод С, я выделяю память через new, и сомневаюсь что reealoc будет правельно работать в этом случае. есть ещё идеи?
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
28.10.2011, 23:39     чтение данных с файла. #4
Цитата Сообщение от warloc69 Посмотреть сообщение
я выделяю память через new
найди эквивалент
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
29.10.2011, 14:44     чтение данных с файла. #5
Цитата Сообщение от warloc69
пробовал вот както так :
а ты знаешь, что функций fopen_s() и fscanf_s() в языке нет ?

Цитата Сообщение от warloc69
вот только переменную path нужно перед этим инициализировать например так
если это очень важно, то можно сначала прочитать эту строку посимвольно, узнав таким образом количество символов, а потом выделить malloc(n + 1)
но у тебя C++, поэтому используй просто string, а для открытия файла - fstream
YouDoItWrong
46 / 46 / 7
Регистрация: 29.10.2011
Сообщений: 154
29.10.2011, 15:44     чтение данных с файла. #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <fstream>
#include <iostream>
#include <string>
 
using namespace std;
 
int main() {
    string file_name, string_from_file;
 
    ifstream input_file("filename.txt");
    getline(input_file,file_name);
    input_file.close();
    input_file.open(file_name);
    //Тут дальнейшие действия.. к примеру вывести строку из файла;
    getline(input_file,string_from_file);
    cout << string_from_file << endl;
    input_file.close();
    system("pause");
}
Этот код считывает строку из файла A с путем к файлу В, берет из файла строку и выводит на экран. Пишите если нужно будет каким-либо образом изменить код
warloc69
78 / 78 / 4
Регистрация: 28.10.2011
Сообщений: 219
29.10.2011, 22:04  [ТС]     чтение данных с файла. #7
Цитата Сообщение от accept Посмотреть сообщение
а ты знаешь, что функций fopen_s() и fscanf_s() в языке нет ?
а это что тогда? http://msdn.microsoft.com/en-us/libr...=vs.80%29.aspx

Добавлено через 2 минуты
YouDoItWrong а если в файле элементы (путь, цыферки) розделены не на строки а скажем пробелами? что то мне кажется что это вариант не прокатит.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
30.10.2011, 08:22     чтение данных с файла. #8
Цитата Сообщение от warloc69
а это что тогда?
это расширение компилятора
такая программа будет собираться только на этом компиляторе
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
30.10.2011, 10:01     чтение данных с файла. #9
accept, а maloc и new не различаются
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
30.10.2011, 10:03     чтение данных с файла. #10
Цитата Сообщение от Van111 Посмотреть сообщение
accept, а maloc и new не различаются
Различаются немного, тем более что у ТСа код на С, в котором new нету.
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
30.10.2011, 10:13     чтение данных с файла. #11
Если надо целиком файл загнать в массив char в чём проблема узнать его размер fseek/ftell ?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
31.10.2011, 03:03     чтение данных с файла. #12
Цитата Сообщение от mimicria
в чём проблема узнать его размер fseek/ftell ?
в си через fseek() + ftell() нельзя узнавать размер файла

C89(draft). fseek
A binary stream need not meaningfully support fseek calls with a whence value
of SEEK_END.
для текстового потока размер просто не узнаешь таким образом
для двоичного потока не установишь индикатор файловой позиции в конец
а если доходить по символу, то и ftell() не нужна, так как можно просто считать символы

Добавлено через 6 минут
Цитата Сообщение от Van111
accept, а maloc и new не различаются
если для C++, то нужно использовать new, а не malloc()
это если там вообще нужно выделение памяти
YouDoItWrong
46 / 46 / 7
Регистрация: 29.10.2011
Сообщений: 154
31.10.2011, 07:48     чтение данных с файла. #13
Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
 
int main() {
        string file_name, string_from_file,str;
        vector<string> file_b;
 
        ifstream input_file("filename.txt");
        input_file >> file_name;
        input_file.close();
        input_file.open(file_name);
        //Тут дальнейшие действия.. к примеру вывести строку из файла;
        while(!input_file.eof()) {
            input_file >> str;
            file_b.push_back(str);
            cout << str << endl;
        }
        input_file.close();
        system("pause");
}
Файл "filename.txt":
C++
1
2
3
4
5
C:\\Python27\\pytonscript.py // /WEQ QWER Q1 1451 15
141 1235 141 562    25 52 252 
2312 1 5 1  36 AF 2 R1 ** AD ?? <>< QWE 1512 412413 124W 
QWE QWE 
 141 1 5R14 1251 4 62 356 23 3523 1 63242 3 2  2     2 2421 1 21
Файл "pytonscript.py":
Python
1
2
3
4
5
def getClass():
    return dict
class D(getClass()):
    pass
d = D()
Консоль:
Миниатюры
чтение данных с файла.  
YouDoItWrong
46 / 46 / 7
Регистрация: 29.10.2011
Сообщений: 154
31.10.2011, 07:51     чтение данных с файла. #14
В векторе file_b храниться все из файла "pytonscript.py", дальше с этим вектором можно делать все что угодно Такой код вам нужен?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
31.10.2011, 07:53     чтение данных с файла. #15
Цитата Сообщение от YouDoItWrong
C++
1
while(!input_file.eof()) {
обязательно проверять на ошибку чтения, иначе может повиснуть цикл
YouDoItWrong
46 / 46 / 7
Регистрация: 29.10.2011
Сообщений: 154
31.10.2011, 08:00     чтение данных с файла. #16
C++
1
2
3
4
5
6
7
8
9
10
while(!input_file.eof()) {
            if(input_file.bad() || input_file.fail()) {
                cout << "Error";
                input_file.close();
                return 0;
            }
            input_file >> str;
            file_b.push_back(str);
            cout << str << endl;
        }
Как то так?

Добавлено через 36 секунд
И что блин с форматированием кода >_<
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2011, 08:25     чтение данных с файла.
Еще ссылки по теме:

C++ Чтение данных из файла
Чтение данных из файла C++
Чтение данных из файла С++ C++

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

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
31.10.2011, 08:25     чтение данных с файла. #17
ну не в if условии, а прямо в while
может даже не .bad() ни .fail(), а сразу !input_file.good() (или is_good там, не помню)

лучше так (короче):
C++
1
2
    while(input_file >> str)
        ;
Yandex
Объявления
31.10.2011, 08:25     чтение данных с файла.
Ответ Создать тему
Опции темы

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