Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305

Работа с файлом через классы

03.10.2010, 18:24. Показов 1983. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем!
Может кто помочь, как работать с файлами (открыть, закрывать, читать из файла, записывать в файл)через классы, объяснить на примере?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.10.2010, 18:24
Ответы с готовыми решениями:

Классы. Работа с файлом
Необходимо записать в новый файл символы исходного файла, проведя перед этим операцию логического побитового умножения с заданным ключом. ...

Работа с файлом через класс
Доброй ночи всем! Хочу реализовать открытие файла для чтения из конструктора класса CTextFile: #ifndef ___TEXT_FILE___ #define...

работа с файлом через входной параметр
int _tmain(int argc,char* argv) { FILE* F =fopen(argv, "wt+"); когда пишу параметр запуская через командную строку или ярлык,...

16
Шаровик затейник
 Аватар для Crudelis
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
03.10.2010, 20:09
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
#include <iostream>
using namespace std;
class ReadText{
    char **str;
    int count;
public:
    ReadText(){
        count=0;
        str=new char*[100];
        for(int i=0;i<100;i++)
            str[i]=new char[50];
    }
    ~ReadText(){
        for(int i=0;i<100;i++)
            delete []str[i];
        delete []str;
    }
    void ReadFile();
    void SaveFile();
    void Show();
};
void ReadText::ReadFile(){
    const int size=65536;
    FILE *f_in=fopen("text.txt","r+");      //открытие файла
    if(!f_in)
        exit(0);
    while(!feof(f_in)){
        fread(str[count],sizeof(char),size,f_in);       //чтение файла
        count++;
    }
    fclose(f_in);       //закрытие файла
 
}
void ReadText::SaveFile(){
    const int size=65536;
    FILE *f_out=fopen("output.txt","w+");
    if(!f_out)
        exit(0);
    for(int i=0;i<count;i++)
        fwrite(str[count],sizeof(char),size,f_out);     //запись в файл
    fclose(f_out);
}
void ReadText::Show(){
    for(int i=0;i<count;i++)
        cout<<str[i]<<endl;
}
void main()
{
    ReadText ob;
    ob.ReadFile();
    ob.Show();
    ob.SaveFile();
}
1
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
03.10.2010, 21:03  [ТС]
А как вот сделать что бы он по символу считывал? потому что мне потом слова там сортировать нужно)))

Добавлено через 46 минут
Вот написал, но что то не работает, помогите найти ошибки))
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
#include <iostream> 
#include <string.h>
#include <iostream>
using namespace std;
 
class first{
    FILE* in;
    FILE* out;
    char *mass;
    public:
        first(){
            char *mass = new char[255];
        };
 
        void file_open(char *f);
 
        ~first(){
            delete [] mass;
        };
};
 
void first::file_open(char *f){
    while(true){
    cout<<"Введите имя файла: ";
    cin>>f;
    in=fopen(f,"r");
        if (!f){
            cout<<"Ошибка имени файла!"<<endl;
            continue;
        }
        else break;
    }
    while(!feof(in)){
        for(int i=0; i<255; i++){
            fscanf(in,"%1c",mass[i]);
        }
        for (int i=0; i<255; i++){
            cout << mass[i];
        }
    }
    fclose(in);
}
 
 
 
int main(){
    setlocale(LC_ALL,"Russian");
    char f[255];
    first worker;
    worker.file_open(f);
    
return 0;
}
0
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
03.10.2010, 21:11
fscanf(in,"%1c",mass[i]);
%1c а такой спецификатор типа есть ? Ошибки то какие пишет ?
0
Шаровик затейник
 Аватар для Crudelis
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
03.10.2010, 21:15
создавайте не массив а матрицу, я в своем примере не зря создал матрицу, так как слова считываются целиком, а сортировать можно так
if(str[i][0]>str[i+i][o])
действие.....

т.е. сортировка по 1му символу слова
0
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
03.10.2010, 21:24  [ТС]
Цитата Сообщение от Crudelis Посмотреть сообщение
создавайте не массив а матрицу, я в своем примере не зря создал матрицу, так как слова считываются целиком, а сортировать можно так
if(str[i][0]>str[i+i][o])
действие.....

т.е. сортировка по 1му символу слова
Дак у вас вроде он блоками читает, ну типо строками.
И как то же нужно задавать размер массив, потому что кто знает сколько слов в файле
0
Шаровик затейник
 Аватар для Crudelis
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
03.10.2010, 21:37
текст из файла считывается либо по пробелу, либо по символам препинания, у меня создается массив
C++
1
2
3
str=new char*[100];             //100 слов
                for(int i=0;i<100;i++)
                        str[i]=new char[50];           //в слове максимум 50 символов
в коде я сделал ошибки:
C++
1
2
3
fread(str[count][50],sizeof(char),size,f_in);  
///
fwrite(str[count][50],sizeof(char),size,f_out);
0
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
03.10.2010, 21:46  [ТС]
что означает в вашем коде
C++
1
...sizeof(char),size...
0
Шаровик затейник
 Аватар для Crudelis
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
03.10.2010, 23:40
fread( void *buffer, size_t size, size_t count, FILE *stream )

buffer - адрес массива, куда запишутся данные

size - размер элемента массива в байтах

count - максимальное количество элементов для считывания

stream - указатель на открытый файл.


fwrite( const void *buffer, size_t size, size_t count, FILE *stream )

buffer - адрес массива, где содержатся данные

size - размер элемента массива в байтах

count - максимальное количество элементов для записи в файл

stream - указатель на открытый файл.

Можно использовать другое чтение файла, которое более проще:
C++
1
2
3
4
5
6
7
8
9
10
11
#include<fstream>
.................
 
ifstream f_in;
    f_in.open("text.txt");
    f_in >> a[1][1];
    f_in.close();
ofstream f_out;
f_out.open(outp.txt);
f_out << a[1][1];
f_out.close();
0
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
03.10.2010, 23:48  [ТС]
Я как то не оч это понимаю. Я вот написал свое, но че то он не хочет нормально выдавать значения.
код:
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
#include <iostream> 
#include <string.h>
#include <iostream>
using namespace std;
 
class first{
    FILE* in;
    FILE* out;
    char **mass;
    int coun;
    char str;
    public:
        first(){
            coun=0;
            mass=new char*[255];
            for(int i=0;i<255;i++)
                mass[i]=new char[50];
        };
 
        void file_open(char *f);
 
        ~first(){
            for(int i=0;i<255;i++)
                delete []mass[i];
            delete []mass;
        };
};
 
void first::file_open(char *f){
    while(true){
        char str;
        cout<<"Введите имя файла: ";
        cin>>f;
        in=fopen(f,"r");
            if (!in){
                cout<<"Ошибка имени файла!"<<endl;
                continue;
            }
            else break;
        }
        int j=0, k=0;
        for (int i=0;i<50; i++){k++;
            fscanf(in,"%1c",&str);
            if (str==' ') {coun++; j++;}
            else mass[coun][i]=str;
            if (feof(in)) break;
        }
        for (coun=0; coun<=j; coun++){
            for (int i=0; i<k; i++){
                cout << mass[coun][i];
            }
            cout<< endl;
        }
    fclose(in);
}
 
 
 
int main(){
    setlocale(LC_ALL,"Russian");
    char f[255];
    first worker;
    worker.file_open(f);
    
return 0;
}
В файле у меня написано так:
папа мама
Через табуляцию (если через пробелы то там ваще хрень)
Вот что выдает:
Миниатюры
Работа с файлом через классы  
0
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
03.10.2010, 23:53  [ТС]
Я просто хочу, что бы он считал одно слово до пробела, потом второе и т.д.
0
Шаровик затейник
 Аватар для Crudelis
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
04.10.2010, 01:01
robert19, выше я писал что когда в тексте встречается пробел то он не считывается, для чего вы делаете вот эту проверку?
C++
1
if (str==' ') {coun++; j++;}
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
#include <iostream> 
#include <string.h>
#include <iostream>
using namespace std;
 
class first{
        FILE* in;
        FILE* out;
        char **mass;
        int coun;
        char str;
        public:
                first(){
                        coun=0;
                        mass=new char*[255];
                        for(int i=0;i<255;i++)
                                mass[i]=new char[50];
                };
 
                void file_open(char *f);
 
                ~first(){
                        for(int i=0;i<255;i++)
                                delete []mass[i];
                        delete []mass;
                };
};
 
void first::file_open(char *f){
        while(true){
                char str;
                cout<<"Введите имя файла: ";
                cin>>f;
                in=fopen(f,"r");
                        if (!in){
                                cout<<"Ошибка имени файла!"<<endl;
                                continue;
                        }
                        else break;
                }
                int j=0, k=0;
                for (int i=0;i<50; i++){
                        k++;
                        fscanf(in,"%c",&str);
                        mass[coun][i]=str;
                        if (feof(in)) break;
                }
 
                        for (int i=0; i<k-1; i++){
                                cout << mass[coun][i];
                        }
                        cout<< endl;
 
        fclose(in);
}
 
 
 
int main(){
        setlocale(LC_ALL,"Russian");
        char f[255];
        first worker;
        worker.file_open(f);
        
return 0;
}
0
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
04.10.2010, 09:00  [ТС]
C++
1
if (str==' ') {coun++; j++;}
Потому что слова считываются в одну строку. Их потом местами не поменять, т.е. по алфавиту не отсортировать

Добавлено через 1 час 55 минут
Парни помогите кто нить сделать этот массив слов. что бы их потом можно было отсортировать (по алфавиту) и обратно в файл записать. Я уже 2-й день сижу, никак не получается
0
Заблокирован
04.10.2010, 10:03
Убиться. Что ж вы за ересь такую пишете? Кто на C++ так с файлами работает?

Цитата Сообщение от robert19 Посмотреть сообщение
А как вот сделать что бы он по символу считывал? потому что мне потом слова там сортировать нужно)))
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
#include <fstream>
#include <iostream>
#include <vector>
#include <iterator>
#include <string>
#include <algorithm>
 
typedef std::vector<std::string> Vec;
 
int main()
{
    // Считали файл.
    std::ifstream inputFile("test.txt", std::ios_base::in);
    Vec arr(
        (std::istream_iterator<Vec::value_type>(inputFile)),
        (std::istream_iterator<Vec::value_type>())
    );
 
    // Отсортировали.
    std::sort(arr.begin(), arr.end(), 
        [](const Vec::value_type& a, const Vec::value_type& b) { return b.compare(a) > 0; });
 
    // Вывели на экран.
    for (Vec::iterator s = arr.begin(); s != arr.end(); s++)
        std::cout << (*s).c_str() << std::endl;
}
0
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
04.10.2010, 10:15  [ТС]
Цитата Сообщение от NightmareZ Посмотреть сообщение
Убиться. Что ж вы за ересь такую пишете? Кто на C++ так с файлами работает?
Не, мне нужно через классы. Вот написал. С файла считывает слова как нужно, но терь отсортировать не могу.

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
#include <iostream> 
#include <string.h>
#include <iostream>
 
using namespace std;
 
class Read{
    private:
        FILE* in;
        FILE* out;
        int n;
        char str[50][50];
       
    public:
        Read(){
            n=0;
        };
        void FileOpen(char *f);
        void TextSort();
        void SaveFile(char *f);
 
};
 
void Read::FileOpen(char *f){
    while(true){
        char str;
        cout<<"Введите имя файла: ";
        cin>>f;
        in=fopen(f,"r");
        if (!in){
            cout<<"Ошибка имени файла!"<<endl;
            continue;
        }
        else break;
    }
 
    while (true){
        fscanf(in,"%s",&str[n]);
        if (feof(in))
            break;
        n++;
    }
 
    for(int i=0;i<n;i++){
        cout<<str[i];
        cout<<endl;
    }
 
    fclose(in);
}
 
void Read::TextSort(){
    char mass;
    for (int i=0; i<n; i++){
        if (str[i]>str[i+1]){
            mass=str[i];
            str[i]=str[i+1];  //1>main.cpp(57): error C2106: =: левый операнд должен быть левосторонним значением
            str[i+1]=mass;  //1>main.cpp(58): error C2440: =: невозможно преобразовать "char" в "char [50]"
        }
    }
    for (int i=0; i<n; i++){
        cout<<str[i];
    }
}
 
int main(){
    setlocale(LC_ALL,"Russian");
    char f[255];
    Read w;
    w.FileOpen(f);
        w.TextSort();
        
return 0;
}
Ошибки я вон в коде закоментил))
И мы потоки как бы еще не изучали
0
Заблокирован
04.10.2010, 10:51
Цитата Сообщение от robert19 Посмотреть сообщение
Не, мне нужно через классы.
Это называется через "жо", а не через классы.
0
29 / 29 / 7
Регистрация: 26.03.2010
Сообщений: 305
04.10.2010, 15:10  [ТС]
Цитата Сообщение от NightmareZ Посмотреть сообщение
Это называется через "жо", а не через классы.
По другому не получается

Добавлено через 4 часа 18 минут
Больше ни у кого нет вариантов?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.10.2010, 15:10
Помогаю со студенческими работами здесь

Работа с текстовым файлом (название файлы через переменную)
доброго времяни суток,подскажите хочу ввести в кансоль переменную типа строка,а затем создать и открыть файл название каторого есть эта...

Как struct Queue и его операции превратить в классы, то есть нужно сделать тоже самое, но через классы
Как struct Queue и его операции превратить в классы, то есть нужно сделать тоже самое, но используя соотвественно классы И как...

C++ работа с файлом
Всем привет, интересует такой вопрос, у меня есть файл с различными данными, новые данные должны неким образом сортироваться и вставать в...

Работа с файлом
Написать программу, которая считывает текст из файла и выводит на экран только цитаты, то есть предложения, заключенные в кавычки.

Работа с файлом
как изменить код,чтобы можно было при следующем вызове функции, дописывать все эти значения в конец файла,а не переписывать файл заново? ...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru