4 / 4 / 0
Регистрация: 23.02.2011
Сообщений: 42
1

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

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

Author24 — интернет-сервис помощи студентам
Допустим, у меня есть файл с некоторым расширением .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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.09.2011, 17:47
Ответы с готовыми решениями:

Чтение чисел из файла. Чтение после конца потока невозможно
Товарищи, помогите. В Pascal'e я не силен, так что не бейте меня ногами, но есть задача: написать...

Как заменить чтение строки из консоли на чтение текстового файла?
основное задание: найти частоту суффикса (например, &quot;ing&quot;) в текстовом документе. в...

Чтение файла, чтение названия папки где находится файл, запись данных на PHP
Допустим у нас есть структура с папками типа Large -&gt; Vehicles -&gt; Firetruck_0 В этой папке лежит...

Чтение заголовка PCX файла и чтение растровых данных PCX файла
Привет форумчане! Столкнулся с такой проблемой. Нужно считать заголовок PCX файла и растровые...

9
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
09.09.2011, 21:48 2
Бинарные файлы
1
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,686
09.09.2011, 21:51 3
Я правильно понял, что в файле *xyz числа представлены строка за строкой так:
"short x3; short x3; short x3; short x3; short x1; long x1; bool x1"?
0
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"?
Я думаю что числа в этом файле просто идут одно за одним, без какого-либо форматирования.
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,686
09.09.2011, 22:36 5
Так не пойдёт. Надо ТОЧНО ЗНАТЬ формат файла. Ну или по крайней мере написать его сюда без колебаний, чтобы я мог предложить какое-либо решение.
Есть два варианта.

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

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

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

Второй вариант: числа представлены как-то иначе (то есть это может быть и чисто текстовый файл или ещё какой-другой формат иметь.) Ну ты тогда уж определись. Качни hiev, открой файл в нём, посмотри чё там за числа и напиши как они представлены. Разберёмся.
0
Brainsbreaker
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
10.09.2011, 01:36 6
Цитата Сообщение от antid0t Посмотреть сообщение
Сам файл .xyz никаким текстовым редактором не открывается -.-
Переименуй его в txt и открывай.
0
594 / 532 / 76
Регистрация: 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
41 / 41 / 10
Регистрация: 22.05.2009
Сообщений: 492
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
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; }
Результаты похожи на правду...
Миниатюры
Чтение файла с нестандартным расширнием  
1
Brainsbreaker
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
10.09.2011, 18:44 10
Как считываешь, как выводишь, то и имеешь.
0
10.09.2011, 18:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.09.2011, 18:44
Помогаю со студенческими работами здесь

Чтение бинарного файла - чтение первых 9 байт
Есть код, который читает первые 9 байт бинарного файла(заголовок записи) void...

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

Чтение файла CSV и чтение из Table View
Здравствуйте, задача считать столбцы и строки excel в TextEdit. Прошу помощи в реализиции. ...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru