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

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

Войти
Регистрация
Восстановить пароль
 
Solomka
0 / 0 / 0
Регистрация: 22.10.2013
Сообщений: 37
#1

Как сделать считывание строки через маску в С++? - C++

22.10.2013, 14:59. Просмотров 485. Ответов 6
Метки нет (Все метки)

Здравствуйте,
Если имеется текстовый файл:
----------------------------------------------
1010203 21065
----------------------------------------------

И есть код на С++ который читает этот файл:
==============================================
C++
1
2
3
4
5
6
7
fstream outputFile;
 
ifstream read_file ("input.txt");
int a , b ;
read_file >> a >> b;
read_file.close();
return 0;
==============================================
то про выполнении программы правильно определяется a=1010203, b=21065.

А вот, если я хочу чтобы он тоже так определял, но числа в файле разделялись точкой с запятой.
То есть файл имел вид:
----------------------------------------------
1010203;21065
----------------------------------------------

Но если применить код:
==============================================
...
C++
1
read_file >> a >> ";" >> b;
...
==============================================
то выдается ошибка компиляции.

А так она не определяет правильно значения:
==============================================
...
C++
1
read_file >> a >> b;
...
==============================================

Как можно считывать переменные из файла используя маску?
В инетеренете не видно таких примеров.
Я знаю как это можно сделать средствами Си с помощью оператора fscanf, но НЕУЖЕЛИ нет такого способа средствами С++???
Ведь есть же форматный вывод!
Значит должен же быть и форматный ввод?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2013, 14:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как сделать считывание строки через маску в С++? (C++):

Считывание из одной строки. Как сделать из нескольких? - C++
#include "stdafx.h" #include <iomanip> #include <iostream> #include <conio.h> #include <locale.h> #include <fstream> #include...

пытаюсь сделать реализацию через считывание из файла кол-ва чисел, i,но незнаю как сделать реализацию из файла в массив и сортировки. - C++
В файле input.txt находится неизвестное количество вещественных чисел в интервале . Выцапарать их оттуда, отсортировать по убыванию модуля...

Как сделать обновление текста строки через определенное время? - C++
Здравствуйте. Как сделать обновление текста строки через определенное время? #include <iostream> #include <string> #include...

Считывание через ifstream строки состоящей из чисел и символов из файла - C++
Хотелось узнать как можно это осуществить, вся суть в том что у меня есть файл в который я записываю данные в виде F(0) T(178...

Как сделать считывание клавиши с клавиатуры в реальном времени? - C++
Хочу написать тетрис, и возник такой вопрос. Я пока знаю только getch, а он стопорит программу пока не нажмёшь кнопку.

Как сделать шаблон на считывание неизвестного типа данных? - C++
Есть размерности двумерного массива. Нужно считать с клавиатуры числа. Они могут быть как int, так и float или double. Как это сделать? ...

6
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.10.2013, 15:10 #2
C++
1
2
3
int a, b;
char c;
read_file >> a >> c >> b;
1
Matan!
Delphi/Java/DB Dev + Math
288 / 154 / 27
Регистрация: 31.05.2013
Сообщений: 1,316
Записей в блоге: 3
Завершенные тесты: 1
22.10.2013, 15:20 #3
Это не код,а белиберда.Приведи ВЕСЬ код,а не его отрывок.
0
Solomka
0 / 0 / 0
Регистрация: 22.10.2013
Сообщений: 37
22.10.2013, 15:38  [ТС] #4
Цитата Сообщение от Jupiter Посмотреть сообщение
C++
1
2
3
int a, b;
char c;
read_file >> a >> c >> b;
А если по мимо цифр будут встречаться и текстовые переменные с типом char[] (тип string было решено по заданию не использовать)

1010203;тестовое;21065
0
Matan!
Delphi/Java/DB Dev + Math
288 / 154 / 27
Регистрация: 31.05.2013
Сообщений: 1,316
Записей в блоге: 3
Завершенные тесты: 1
22.10.2013, 15:48 #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <fstream>
 
using namespace std;
 
int main()
{
    ifstream outputFile;
 
    ifstream read_file ("input.txt");
    int a, b;
    char c = ';';
    read_file >> a >>  b;
    read_file.close();
    cout << "a= " << a << c << "b= " << b << endl;
    system("pause");
    return 0;
}
Добавлено через 2 минуты
Цитата Сообщение от Solomka Посмотреть сообщение
А если по мимо цифр будут встречаться и текстовые переменные с типом char[] (тип string было решено по заданию не использовать)

1010203;тестовое;21065
Тебе нужно прочитать файл или только вставить ";"?
Если прочитать файл,то
...
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
...
1
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.10.2013, 16:00 #6
Цитата Сообщение от Solomka Посмотреть сообщение
А если по мимо цифр будут встречаться и текстовые переменные с типом char[] (тип string было решено по заданию не использовать)
1010203;тестовое;21065
принцип аналогичный
1
Solomka
0 / 0 / 0
Регистрация: 22.10.2013
Сообщений: 37
24.10.2013, 08:37  [ТС] #7
Цитата Сообщение от Jupiter Посмотреть сообщение
принцип аналогичный
Если тестовый файл "input.txt" содержит:
HTML5
1
 1010203;тестовая переменная;21065
А код выполняемой программы представляет из себя:
C++
1
2
3
4
5
6
7
8
9
10
11
fstream outputFile;
 
    ifstream read_file ("input.txt");
 
    int a , b ;
    char d;
    char word[19];
    char dd;
 
    read_file >> a >> d >> word >> dd >> b ;
    read_file.close();
то компилируется программа нормально.
и переменные a и d определяются нормально.
а вот переменная word определяется наполовину нормально.
половина элементов этого массива заполняется нормально: "тестовая ", а дальше пусто.
а переменная dd определяется как "п".
и соответственно переменная b определяется неправильно как "-858993460".
видимо проблема с пробелами...

как можно обойти эту ситуацию с пробелами?

Добавлено через 1 час 57 минут
Если даже так сделать,...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int _tmain(int argc, _TCHAR* argv[])
{
    fstream outputFile;
 
    ifstream read_file ("input.txt");
 
    int a , b ;
    char d;
    char word[19];
    char dd;
 
    read_file >> a >> d >> string("") >> word >>d >> b ;
    read_file.close();
    return 0;
}
то тогда переменные тоже не правильно определяются:

a=1010203
b=-858993460
d=';'
word="переменная;21065"

Добавлено через 3 часа 25 минут
В итоге всё даже печальнее...
если текстовый файл содержит:
HTML5
1
 1010203;тестовая_переменная;21065
код выглядит:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int _tmain(int argc, _TCHAR* argv[])
{
    fstream outputFile;
 
    ifstream read_file ("input.txt");
 
    int a , b ;
    char d;
    char word[19];
    char dd;
 
    read_file >> a >> d >> word >> dd >> b ;
    read_file.close(); 
    return 0;
}
то часть значений переменных всё равно не правильно определяется:
a =1010203 (int)
b =-858993460 (int)
d = ';' (char)
dd = 'М' (char)
word = "тестовая_переменная" (char [19])

Добавлено через 16 часов 40 минут
???
0
24.10.2013, 08:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2013, 08:37
Привет! Вот еще темы с ответами:

Как эффективнее всего реализовать считывание нужной строки? - C++
Всем привет! Нужно считать определенную строку в файле, допустим 5-ую. Как эффективнее всего это реализовать?

Как сделать так, что бы длинна строки сама менялась при вводе строки? - C++
Есть такой код #include &quot;stdafx.h&quot; #include &quot;enter.h&quot; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;iostream&gt; #include...

как сделать из строки массив из символов этой строки - C++
как? заранее спасибо

Как создать маску для поиска чисел из файла? - C++
Как создать маску для поиска чисел из внешнего файла?


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

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

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