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

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

Войти
Регистрация
Восстановить пароль
 
antid0t
4 / 4 / 0
Регистрация: 23.02.2011
Сообщений: 42
#1

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

09.09.2011, 17:47. Просмотров 566. Ответов 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++):

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

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

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

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

Чтение нескольких структур и одной переменной из бинарного файла. Формат файла имеется - C++
Формат файла состоит из 3 структур и одной переменной. Подробное описание формата во вложении, просьба посмотреть его. У меня возникла...

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

9
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.09.2011, 21:48 #2
Бинарные файлы
1
kravam
быдлокодер
1703 / 890 / 45
Регистрация: 04.06.2008
Сообщений: 5,489
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 / 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
kravam
быдлокодер
1703 / 890 / 45
Регистрация: 04.06.2008
Сообщений: 5,489
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
884 / 362 / 31
Регистрация: 01.02.2011
Сообщений: 1,586
10.09.2011, 01:36 #6
Цитата Сообщение от antid0t Посмотреть сообщение
Сам файл .xyz никаким текстовым редактором не открывается -.-
Переименуй его в txt и открывай.
0
OstapBender
584 / 523 / 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));
// вроде такие там парамерты
 
// ...вывод
0
From_Tula
40 / 40 / 2
Регистрация: 22.05.2009
Сообщений: 483
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 / 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
Миниатюры
Чтение файла с нестандартным расширнием  
Digit@ll
Brainsbreaker
884 / 362 / 31
Регистрация: 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
Привет! Вот еще темы с ответами:

Чтение файла с несколькими знаками конца файла - C++
В файле несколько раз встречается ноль, и ни как не получается прочитать его полностью. Как можно решить данную проблему ?

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

чтение из файла - C++
Здравствуйте, уважаемые программисты. Есть файл с записями (объектами), у каждой записи 3 параметра (переменные). Я считываю запись,...

Чтение из файла - C++
Доброго времени суток. Пытаюсь прочитать данные из файла Weapon.txt mainfile #include &quot;Common.h&quot; #include &quot;cLog.h&quot; #include...


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

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

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