Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/41: Рейтинг темы: голосов - 41, средняя оценка - 5.00
78 / 78 / 9
Регистрация: 28.10.2011
Сообщений: 219
1

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

28.10.2011, 22:43. Просмотров 7859. Ответов 16
Метки нет (Все метки)

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

Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла.
#include<iostream> #include<fstream> #include<locale.h> #include<iomanip> #include <cstdlib>...

Чтение из файла определённого места и сортировка данных исходя из этих данных
Есть некий текстовый документ, содержащий информацию о посещении сайта в формате: Например...

Чтение данных из файла С++
Здравствуйте. Дан простой пример потокового ввода/вывода дисковых файлов из Лафоре ООП С++. //...

Чтение данных из файла
Вот программа запись и чтение из файла. Сначала записываем данные о студенте(фамилия, год...

16
214 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
28.10.2011, 23:08 2
если тебе жалко память но плевать на быстродействие используй
fgetc
reealoc

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

читаешь файл пока не встретишь цифру и вместе с этим изменяешь границу памяти
по символьно файл можно читать и через fscanf_s(f,"%c",simvol);
насколько я понял для использования reealoc нужно память выделять malloc а это устаревшый метод С, я выделяю память через new, и сомневаюсь что reealoc будет правельно работать в этом случае. есть ещё идеи?
0
214 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
28.10.2011, 23:39 4
Цитата Сообщение от warloc69 Посмотреть сообщение
я выделяю память через new
найди эквивалент
0
4850 / 3271 / 466
Регистрация: 10.12.2008
Сообщений: 10,570
29.10.2011, 14:44 5
Цитата Сообщение от warloc69
пробовал вот както так :
а ты знаешь, что функций fopen_s() и fscanf_s() в языке нет ?

Цитата Сообщение от warloc69
вот только переменную path нужно перед этим инициализировать например так
если это очень важно, то можно сначала прочитать эту строку посимвольно, узнав таким образом количество символов, а потом выделить malloc(n + 1)
но у тебя C++, поэтому используй просто string, а для открытия файла - fstream
0
48 / 48 / 24
Регистрация: 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 с путем к файлу В, берет из файла строку и выводит на экран. Пишите если нужно будет каким-либо образом изменить код
0
78 / 78 / 9
Регистрация: 28.10.2011
Сообщений: 219
29.10.2011, 22:04  [ТС] 7
Цитата Сообщение от accept Посмотреть сообщение
а ты знаешь, что функций fopen_s() и fscanf_s() в языке нет ?
а это что тогда? http://msdn.microsoft.com/en-u... 80%29.aspx

Добавлено через 2 минуты
YouDoItWrong а если в файле элементы (путь, цыферки) розделены не на строки а скажем пробелами? что то мне кажется что это вариант не прокатит.
0
4850 / 3271 / 466
Регистрация: 10.12.2008
Сообщений: 10,570
30.10.2011, 08:22 8
Цитата Сообщение от warloc69
а это что тогда?
это расширение компилятора
такая программа будет собираться только на этом компиляторе
1
214 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
30.10.2011, 10:01 9
accept, а maloc и new не различаются
0
Higher
1945 / 1211 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
30.10.2011, 10:03 10
Цитата Сообщение от Van111 Посмотреть сообщение
accept, а maloc и new не различаются
Различаются немного, тем более что у ТСа код на С, в котором new нету.
0
return (true);
1973 / 1110 / 219
Регистрация: 19.04.2011
Сообщений: 2,345
30.10.2011, 10:13 11
Если надо целиком файл загнать в массив char в чём проблема узнать его размер fseek/ftell ?
0
4850 / 3271 / 466
Регистрация: 10.12.2008
Сообщений: 10,570
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()
это если там вообще нужно выделение памяти
0
48 / 48 / 24
Регистрация: 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()
Консоль:
0
Миниатюры
Чтение данных из файла  
48 / 48 / 24
Регистрация: 29.10.2011
Сообщений: 154
31.10.2011, 07:51 14
В векторе file_b храниться все из файла "pytonscript.py", дальше с этим вектором можно делать все что угодно Такой код вам нужен?
0
4850 / 3271 / 466
Регистрация: 10.12.2008
Сообщений: 10,570
31.10.2011, 07:53 15
Цитата Сообщение от YouDoItWrong
C++
1
while(!input_file.eof()) {
обязательно проверять на ошибку чтения, иначе может повиснуть цикл
0
48 / 48 / 24
Регистрация: 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 секунд
И что блин с форматированием кода >_<
0
4850 / 3271 / 466
Регистрация: 10.12.2008
Сообщений: 10,570
31.10.2011, 08:25 17
ну не в if условии, а прямо в while
может даже не .bad() ни .fail(), а сразу !input_file.good() (или is_good там, не помню)

лучше так (короче):
C++
1
2
    while(input_file >> str)
        ;
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.10.2011, 08:25

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Чтение данных из файла
Народ помогите что здесь неправильно,надо прочитать текст из файла и вывести на экран...

Чтение данных из файла
Вот задание прочитать данные из файла и вывести их также как они в файле распалагаются на экран...

Чтение данных из файла
Здравствуйте, в программе нужно прочитать данные из файла и записать результат в ассоциативный...

Чтение данных из файла
Доброго всем здравия, телесного и духовного! Код работает, не понятно лишь условие while ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.