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

Посимвольное чтение из файла - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
undestroyer
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 53
09.05.2013, 16:17     Посимвольное чтение из файла #1
Всем добрый вечер (ночь)! Так сложилась ситуация что нужно мне посимвольно считать текст из файла fin в массив str[i][j], причем считывать надо только ДО символа переноса строки \n(включительно). Скажите пожалуйста почему не работает мой фрагмент (где-то зацикливается):
C++
1
2
3
4
5
6
7
8
9
10
11
while (!feof(fin))
    {
        do
        {
            str[i][j]=fgetc(fin);
            j++;
        }
        while (str[i][j]!='\n');
        i++;
        j=0;
    }
Добавлено через 20 часов 24 минуты
По ходу выполнения чтения в str[0][0] записывается ноль и больше ничего не происходит. В чем косяк?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
09.05.2013, 18:30     Посимвольное чтение из файла #21
Цитата Сообщение от stima Посмотреть сообщение
for (int i = 0, c = 0; (c = fgetc(fin)) != EOF; ++i)
{
* * *int j = 0;
* * *for ( ;str[i][j] != '\n'; ++j)
* * *{
* * * * * str[i][j] = c;
* * *}
* * *str[i][j] = 0;
}
лучше такое проверять,ибо оно не работает. Вообще сложно понять,что эта подпрограмма делает. Прочитали один раз с, а что происходит во внутреннем цикле?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
undestroyer
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 53
09.05.2013, 19:20  [ТС]     Посимвольное чтение из файла #22
Ура! Текст считывается в том же формате, пускай даже не посимвольно. Вывод на экран идет правильно, а вот вывод в другой файл не работает(в конечном файле одни пробелы).
C++
1
2
3
4
5
6
7
8
9
10
ifstream fin(input);
ofstream fout(output);
while (! fin.eof())
{
    fin.getline(str[i],sizeof(str[i]));
    cout.write(str[i],sizeof(str[i]));
    i++;
}
for (k=0;k<i;k++)
    fout.write(str[i],sizeof(str[i]));
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
09.05.2013, 19:25     Посимвольное чтение из файла #23
undestroyer, используй
C++
c = fin.get();
если хочешь по одному символу.
undestroyer
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 53
09.05.2013, 19:37  [ТС]     Посимвольное чтение из файла #24
Цитата Сообщение от programina Посмотреть сообщение
undestroyer, используй
C++
c = fin.get();
если хочешь по одному символу.
"если что-то работает и работает правильно - не трогай! сломаешь!" (с) Кто-то из великих
сейчас я хочу понять почему в конечный файл не записывались символы
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
09.05.2013, 19:43     Посимвольное чтение из файла #25
undestroyer, потому что не забывайте закрывать файлы!
undestroyer
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 53
09.05.2013, 19:45  [ТС]     Посимвольное чтение из файла #26
Цитата Сообщение от metaluga145 Посмотреть сообщение
undestroyer, потому что не забывайте закрывать файлы!
C++
1
2
fin.close();
fout.close();
стоят практически в самом конце функции
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2013, 20:20     Посимвольное чтение из файла
Еще ссылки по теме:

Посимвольное считывание из файла C++
Как создать посимвольное чтение строки и загнать в массив C++
C++ Посимвольное чтение массива char

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

Или воспользуйтесь поиском по форуму:
undestroyer
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 53
09.05.2013, 20:20  [ТС]     Посимвольное чтение из файла #27
вот весь код программы:
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
75
76
77
78
79
80
81
82
83
84
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <fstream>
 
using namespace std;
 
void main()
{
    char input[32],output[32];
    char str[10][80]={'#0'};
    int i=0,n,j=0,k=0,l=0,buff1,buff2,err[10][2]={-1};
    bool point=1;
    for(i=0; i<10;i++)
        err[i][0]=i;
    
    setlocale(LC_ALL,"Russian");
    cout<<"путь к файлу с исходными текстом:";
    cin.getline(input,32);
    cout<<"путь и имя файла для сохранения обработанного текста:";
    cin.getline(output,32);
    ifstream fin(input);
    ofstream fout(output);
    cout<<"Текст из файла:\n";
    i=0;
 
    while (! fin.eof())
    {
        fin.getline(str[i],sizeof(str[i]));
        cout.write(str[i],sizeof(str[i]));
        i++;
    }
 
    for (k=0;k<i;k++)
        fout.write(str[i],sizeof(str[i]));
 
    for(k=0;k<i;k++)
        for (j=0;str[k][j]!='\0';j++)
            if (str[k][j]=='0')
                if ((str[k][j-1]!='0')&&(str[k][j-1]!='1')&&(str[k][j-1]!='2')&&(str[k][j-1]!='3')&&(str[k][j-1]!='4')&&
                    (str[k][j-1]!='5')&&(str[k][j-1]!='6')&&(str[k][j-1]!='7')&&(str[k][j-1]!='8')&&(str[k][j-1]!='9')&&(str[k][j-1]!='.'))
                    if (str[k][j+1]!='.') 
                    {
                        str[k][j]=' ';
                        err[k][1]++;
                    }
 
    n=0;
    j=0;
    do
    {
        for (n=0; n<i;n++)
        {
            point=0;
            if (err[n][1]>err[n+1][1])
            {
                buff1=err[n][0];
                buff2=err[n][1];
                err[n][0]=err[n+1][0];
                err[n][1]=err[n+1][1];
                err[n+1][0]=buff1;
                err[n+1][1]=buff2;
                point=1;
            }
        }
    }
    while (point==1);
 
    cout<<"убираем лишние нули:\n";
    for(n=0;n<i;n++)
    {
        for (j=0;str[err[n][0]][j]!='\0';j++)
            if (str[err[n][0]][j]!=' ')
            {
            cout<<str[err[n][0]][j];
            fout.put(str[err[n][0]][j]);
            }
        cout<<"\n";
        fout.put('\n');
    }
    fin.close();
    fout.close();
    system ("pause");
}
Получает на входе текстовый файл (не более 10х80), в файле убирает начальные незначащие нули из чисел, сортирует строки в порядке возрастания количества удалений и сохраняет в отдельный файл.
что работает: получение текста из файла, удаление лишних нулей, сортировка строк(?).
что НЕ работает: вывод конечной информации в итоговый файл (не пойму откуда появляются пробелы перед текстом, теряет 1 строку) скриншот приложен
Миниатюры
Посимвольное чтение из файла  
Yandex
Объявления
09.05.2013, 20:20     Посимвольное чтение из файла
Ответ Создать тему
Опции темы

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