Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
antid0t
4 / 4 / 1
Регистрация: 23.02.2011
Сообщений: 42
#1

Чтение файла с нестандартным расширнием - C++

09.09.2011, 17:47. Просмотров 590. Ответов 9
Метки нет (Все метки)

Допустим, у меня есть файл с некоторым расширением .xyz
В файле записаны числа, много (около семи тысяч)
Мне нужно их считать и вывести на экран или в текстовый файл (.txt) в определенном формате (таблица)
Формат строки вывода: short x3; short x3; short x3; short x3; short x1; long x1; bool x1

Проблема заключается в том что компилятор не дает мне считать переменную типа bool.
А так же в том что я не могу считать больше одной строки.
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 <iostream.h>
#include <fstream.h>
#include <stdio.h>
 
int main() {
    ifstream fin("four.xyz");
    ofstream fout("wasd.txt");
    short a;
    long b;
    short c;
    for (int i=0; i <10; i++) {
        for(int j=0; j<4; j++) {
            for (int k=0; k<3; k++) {
                fin >> a;
                fout << a << " "; }
            fout << "; "; }
        fin >> a;
        fout << a << "; ";
        fin >> b;
        fout << b << "; ";
        fin >> c;
        fout << c << " \n"; }
 
    fin.close();
    fout.close();
    return 1; }
Чтобы запустить программу я изменил тип последней переменной на short, но результаты все равно разочаровывают.
В файле вывода (wasd.txt) 10 раз повторяется одна и таже строка:
0 0 0 ; 0 0 0 ; 0 0 0 ; 0 0 0 ; 0; -858993460; -13108

Как мне считать всю (или хотя бы последнюю) информацию из файла.
Сам файл .xyz никаким текстовым редактором не открывается -.-
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2011, 17:47
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Чтение файла с нестандартным расширнием (C++):

Переделать в коде чтение из файла в чтение с клавиатуры
Переделайте что бы текст считывался с клавиатуры, а не с файла! Буду благодарен...

Чтение из файла. Повторное чтение файла
Добрый день. Необходимо реализовать в программе функцию повторного чтения...

Анализ буфера клавиатуры нестандартным методом
Здравствуйте! Ребята, подскажите, не знаю откуда копать и куда. Есть задача: ....

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

Чтение нескольких структур и одной переменной из бинарного файла. Формат файла имеется
Формат файла состоит из 3 структур и одной переменной. Подробное описание...

Ищу литературу по нестандартным алгоритмам/олимпиадным задачам
Посоветуйте литературу, которая направлена на нестандартные...

9
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.09.2011, 21:48 #2
http://www.cyberforum.ru/cpp-beginners/thread287606.html#post1609277
1
kravam
быдлокодер
1706 / 893 / 105
Регистрация: 04.06.2008
Сообщений: 5,524
09.09.2011, 21:51 #3
Я правильно понял, что в файле *xyz числа представлены строка за строкой так:
"short x3; short x3; short x3; short x3; short x1; long x1; bool x1"?
0
antid0t
4 / 4 / 1
Регистрация: 23.02.2011
Сообщений: 42
09.09.2011, 22:26  [ТС] #4
Цитата Сообщение от kravam Посмотреть сообщение
Я правильно понял, что в файле *xyz числа представлены строка за строкой так:
"short x3; short x3; short x3; short x3; short x1; long x1; bool x1"?
Я думаю что числа в этом файле просто идут одно за одним, без какого-либо форматирования.
0
kravam
быдлокодер
1706 / 893 / 105
Регистрация: 04.06.2008
Сообщений: 5,524
09.09.2011, 22:36 #5
Так не пойдёт. Надо ТОЧНО ЗНАТЬ формат файла. Ну или по крайней мере написать его сюда без колебаний, чтобы я мог предложить какое-либо решение.
Есть два варианта.

Первый: предполагаем, что файл бинарный, в том смысле, что его можно разбить на байты по 4 символа, каждый из которых и есть нужное нам число; числа представлены так, как они были бы представлены в памяти компьютера, то есть:

C0 00 00 00 20 00 00 00 34 00 00 00
И это будут числа (в десятичной системе): 192, 32, 52

Тогда я смогу тебе помочь

Второй вариант: числа представлены как-то иначе (то есть это может быть и чисто текстовый файл или ещё какой-другой формат иметь.) Ну ты тогда уж определись. Качни hiev, открой файл в нём, посмотри чё там за числа и напиши как они представлены. Разберёмся.
0
Digit@ll
Brainsbreaker
888 / 366 / 51
Регистрация: 01.02.2011
Сообщений: 1,586
10.09.2011, 01:36 #6
Цитата Сообщение от antid0t Посмотреть сообщение
Сам файл .xyz никаким текстовым редактором не открывается -.-
Переименуй его в txt и открывай.
0
OstapBender
584 / 523 / 75
Регистрация: 22.03.2011
Сообщений: 1,585
10.09.2011, 02:31 #7
Цитата Сообщение от antid0t Посмотреть сообщение
Формат строки вывода: short x3; short x3; short x3; short x3; short x1; long x1; bool x1
может всё таки входной строки?
если так - можно предположить что данные там в бинарном виде и юзануть fread..
как-то так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct DataFormat {
short sh[13];
long l;
bool b;
} temp;
 
 
//...
 
file.read(char*)&temp, sizeof(DataFormat));
// вроде такие там парамерты
 
// ...вывод
0
From_Tula
40 / 40 / 10
Регистрация: 22.05.2009
Сообщений: 485
10.09.2011, 02:51 #8
C++
1
2
3
ifstream fin("four.xyz");//считываешь до пробела
fin >> a;
fout << a << " ";
ты уверен что у тебя каждое число на новой строчке?
так же пустая строка у тебя будет = 0

C++
1
2
3
for (int k=0; k<3; k++) {
                                fin >> a;
                                fout << a << " "; }
вывод будет таким 0 ;0 ;0 ;
а у тебя

Цитата Сообщение от antid0t Посмотреть сообщение
0 0 0 ;
если не уверен в содержимом файла считывай его сперва в строку.
0
antid0t
4 / 4 / 1
Регистрация: 23.02.2011
Сообщений: 42
10.09.2011, 16:46  [ТС] #9
Файл действительно оказался бинарным, написал програмку для его чтения:
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.h>
#include <fstream.h>
#include <stdio.h>
#include <iomanip.h>
 
int main() {
    ifstream fin("source.xyz", ios::binary);
    ofstream fout("output.txt");
    long b = 0;
    bool c = 0;
    short a = 0;
    int endOfFile = 0;
    for (int i=0; i<4; i++) 
        fout << setw(20) << "short" << " || ";
    fout << setw(6) << "short" << " || ";
    fout << setw(11) << "long" << " || ";
    fout << setw(4) << "bool" << endl;
 
    while(fin.read((char *)&endOfFile, sizeof(int))) {
        for (int j=0; j<4; j++) {
            for(i=0; i<3; i++) {
                fin.read((char *)&a, sizeof(short)) ;
                fout << setw(6) << a;
                if (i < 2)
                fout << " "; }
            fout << " || "; }
        fin.read((char *)&a, sizeof(short));
        fout << setw(6) << a << " || ";
        fin.read((char *)&b, sizeof(long)); 
        fout << setw(11) << b << " || ";
        fin.read((char *)&c, sizeof(bool));
        fout << c << "\n";
    }
 
    /*while(instrm.read((char *)&endOfFile, sizeof(int)))       // Checker
        cout << endOfFile << ' ';
    cout << '\n';*/
 
    fin.close();
    fout.close();
    return 1; }
Результаты похожи на правду...
1
Миниатюры
Чтение файла с нестандартным расширнием  
Digit@ll
Brainsbreaker
888 / 366 / 51
Регистрация: 01.02.2011
Сообщений: 1,586
10.09.2011, 18:44 #10
Как считываешь, как выводишь, то и имеешь.
0
10.09.2011, 18:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2011, 18:44
Привет! Вот еще темы с решениями:

как может корректно выполняющийся оператор >> (чтение из текстового файла) негативно влиять на открытие другого файла?
Друзья! Создадим два текстовых файла, f_0.txt и f_1.txt и что-нибудь в них...

Чтение файла с несколькими знаками конца файла
В файле несколько раз встречается ноль, и ни как не получается прочитать его...

Чтение текстового файла специфического файла
Добрый день! Есть один текстовый файл определенного формата. Заголовок по...

Чтение из файла
Не могу найти ссылки на чтение из файла в стиле C и C++. Дайте пожалуйста...


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

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

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