Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.77
warloc69
78 / 78 / 4
Регистрация: 28.10.2011
Сообщений: 219
#1

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

28.10.2011, 22:43. Просмотров 4998. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2011, 22:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение данных из файла (C++):

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

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

Чтение данных из файла - C++
1. Дан файл с именами людей, датами рождения и смерти. Прочитать данные из файла и поместить их в структуру данных, которая будет выглядеть...

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

Чтение данных из файла - C++
Народ помогите что здесь неправильно,надо прочитать текст из файла и вывести на экран буквы,встречающиеся в тексте по одному разу в...

Чтение данных из файла - C++
Очень нужна помощь: никак не получается написать функцию чтения из файла на С++ Есть на С, но хочу на С++, все никак не выходит Вот...

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

читаешь файл пока не встретишь цифру и вместе с этим изменяешь границу памяти
0
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 будет правельно работать в этом случае. есть ещё идеи?
0
Van111
210 / 189 / 4
Регистрация: 03.08.2011
Сообщений: 2,598
Записей в блоге: 12
28.10.2011, 23:39 #4
Цитата Сообщение от warloc69 Посмотреть сообщение
я выделяю память через new
найди эквивалент
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
29.10.2011, 14:44 #5
Цитата Сообщение от warloc69
пробовал вот както так :
а ты знаешь, что функций fopen_s() и fscanf_s() в языке нет ?

Цитата Сообщение от warloc69
вот только переменную path нужно перед этим инициализировать например так
если это очень важно, то можно сначала прочитать эту строку посимвольно, узнав таким образом количество символов, а потом выделить malloc(n + 1)
но у тебя C++, поэтому используй просто string, а для открытия файла - fstream
0
YouDoItWrong
47 / 47 / 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 с путем к файлу В, берет из файла строку и выводит на экран. Пишите если нужно будет каким-либо образом изменить код
0
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/library/z5hh6ee9%28v=vs.80%29.aspx

Добавлено через 2 минуты
YouDoItWrong а если в файле элементы (путь, цыферки) розделены не на строки а скажем пробелами? что то мне кажется что это вариант не прокатит.
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
30.10.2011, 08:22 #8
Цитата Сообщение от warloc69
а это что тогда?
это расширение компилятора
такая программа будет собираться только на этом компиляторе
1
Van111
210 / 189 / 4
Регистрация: 03.08.2011
Сообщений: 2,598
Записей в блоге: 12
30.10.2011, 10:01 #9
accept, а maloc и new не различаются
0
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
30.10.2011, 10:03 #10
Цитата Сообщение от Van111 Посмотреть сообщение
accept, а maloc и new не различаются
Различаются немного, тем более что у ТСа код на С, в котором new нету.
0
mimicria
return (true);
1958 / 1095 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
30.10.2011, 10:13 #11
Если надо целиком файл загнать в массив char в чём проблема узнать его размер fseek/ftell ?
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
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
YouDoItWrong
47 / 47 / 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()
Консоль:
0
Миниатюры
Чтение данных из файла  
YouDoItWrong
47 / 47 / 7
Регистрация: 29.10.2011
Сообщений: 154
31.10.2011, 07:51 #14
В векторе file_b храниться все из файла "pytonscript.py", дальше с этим вектором можно делать все что угодно Такой код вам нужен?
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
31.10.2011, 07:53 #15
Цитата Сообщение от YouDoItWrong
C++
1
while(!input_file.eof()) {
обязательно проверять на ошибку чтения, иначе может повиснуть цикл
0
31.10.2011, 07:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2011, 07:53
Привет! Вот еще темы с ответами:

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

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

Чтение данных из файла - C++
У меня такая проблема, мне дан бинарный файл, где записаны числа типа float. Мне необходимо их оттуда прочитать. Но никак не получается((...

Чтение данных из файла - C++
Доброго времени, долго искал ответ, решил все таки спросить. Есть файл в котором такие данные TTT ppp 5 5 5 EEE aaa 3 3 3 DDD vvv 6...


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

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

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