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

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

Восстановить пароль Регистрация
 
antid0t
 Аватар для antid0t
4 / 4 / 0
Регистрация: 23.02.2011
Сообщений: 42
09.09.2011, 17:47     Чтение файла с нестандартным расширнием #1
Допустим, у меня есть файл с некоторым расширением .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 никаким текстовым редактором не открывается -.-
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2011, 17:47     Чтение файла с нестандартным расширнием
Посмотрите здесь:

C++ Чтение из файла
C++ Чтение из файла
Чтение файла C++
C++ Чтение из файла
C++ Чтение из файла
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.09.2011, 21:48     Чтение файла с нестандартным расширнием #2
Бинарные файлы
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,267
09.09.2011, 21:51     Чтение файла с нестандартным расширнием #3
Я правильно понял, что в файле *xyz числа представлены строка за строкой так:
"short x3; short x3; short x3; short x3; short x1; long x1; bool x1"?
antid0t
 Аватар для antid0t
4 / 4 / 0
Регистрация: 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"?
Я думаю что числа в этом файле просто идут одно за одним, без какого-либо форматирования.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,267
09.09.2011, 22:36     Чтение файла с нестандартным расширнием #5
Так не пойдёт. Надо ТОЧНО ЗНАТЬ формат файла. Ну или по крайней мере написать его сюда без колебаний, чтобы я мог предложить какое-либо решение.
Есть два варианта.

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

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

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

Второй вариант: числа представлены как-то иначе (то есть это может быть и чисто текстовый файл или ещё какой-другой формат иметь.) Ну ты тогда уж определись. Качни hiev, открой файл в нём, посмотри чё там за числа и напиши как они представлены. Разберёмся.
Digit@ll
Brainsbreaker
 Аватар для Digit@ll
832 / 343 / 27
Регистрация: 01.02.2011
Сообщений: 1,483
10.09.2011, 01:36     Чтение файла с нестандартным расширнием #6
Цитата Сообщение от antid0t Посмотреть сообщение
Сам файл .xyz никаким текстовым редактором не открывается -.-
Переименуй его в txt и открывай.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 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));
// вроде такие там парамерты
 
// ...вывод
From_Tula
40 / 40 / 2
Регистрация: 22.05.2009
Сообщений: 469
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 ;
если не уверен в содержимом файла считывай его сперва в строку.
antid0t
 Аватар для antid0t
4 / 4 / 0
Регистрация: 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; }
Результаты похожи на правду...
Миниатюры
Чтение файла с нестандартным расширнием  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2011, 18:44     Чтение файла с нестандартным расширнием
Еще ссылки по теме:

чтение из файла C++
C++ Анализ буфера клавиатуры нестандартным методом
чтение из файла C++

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

Или воспользуйтесь поиском по форуму:
Digit@ll
Brainsbreaker
 Аватар для Digit@ll
832 / 343 / 27
Регистрация: 01.02.2011
Сообщений: 1,483
10.09.2011, 18:44     Чтение файла с нестандартным расширнием #10
Как считываешь, как выводишь, то и имеешь.
Yandex
Объявления
10.09.2011, 18:44     Чтение файла с нестандартным расширнием
Ответ Создать тему
Опции темы

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