Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/50: Рейтинг темы: голосов - 50, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 53
1

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

09.05.2013, 16:17. Показов 9382. Ответов 26
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем добрый вечер (ночь)! Так сложилась ситуация что нужно мне посимвольно считать текст из файла 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] записывается ноль и больше ничего не происходит. В чем косяк?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.05.2013, 16:17
Ответы с готовыми решениями:

Посимвольное чтение файла в вектор
Вечер добрый. Есть файл sir.in.txt, содержащий строку ABC; посимвольно записываю его в вектор...

Посимвольное чтение
В консоль подается текст содержащий такие выражения: а=3 b=7 z=32 a=1 y=2 b=7...

Посимвольное чтение массива char
Производится чтение из файла.Определенный диапазон считывается в переменную.Необходимо произвести...

Посимвольное чтение, добавление в конец строки
Программа должна брать из файла массив символов, читать посимвольно и к каждому символу в конец...

26
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
09.05.2013, 18:30 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от 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;
}
лучше такое проверять,ибо оно не работает. Вообще сложно понять,что эта подпрограмма делает. Прочитали один раз с, а что происходит во внутреннем цикле?
0
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]));
0
2062 / 618 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
09.05.2013, 19:25 23
undestroyer, используй
C++
c = fin.get();
если хочешь по одному символу.
0
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 53
09.05.2013, 19:37  [ТС] 24
Цитата Сообщение от programina Посмотреть сообщение
undestroyer, используй
C++
c = fin.get();
если хочешь по одному символу.
"если что-то работает и работает правильно - не трогай! сломаешь!" (с) Кто-то из великих
сейчас я хочу понять почему в конечный файл не записывались символы
0
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
09.05.2013, 19:43 25
undestroyer, потому что не забывайте закрывать файлы!
0
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 53
09.05.2013, 19:45  [ТС] 26
Цитата Сообщение от metaluga145 Посмотреть сообщение
undestroyer, потому что не забывайте закрывать файлы!
C++
1
2
fin.close();
fout.close();
стоят практически в самом конце функции
0
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 строку) скриншот приложен
Миниатюры
Посимвольное чтение из файла  
0
09.05.2013, 20:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.05.2013, 20:20
Помогаю со студенческими работами здесь

Посимвольное чтение строки типа string
Здравствуйте! Подскажите, пожалуйста. У меня есть строка типа string, нужно все цифры вывести на...

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

Посимвольное считывание из файла
Добрый вечер уважаемые формучане. Помогите найти ошибку в коде программы, реализующей алгоритм...

Посимвольное считывание из файла
Нужно считать данные из файла посимвольно, при этом не все подряд, а, например из 1й строчки с 5...


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

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