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

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

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

Считывание чисел, вычитание и запись в новый файл каждой строки - C++

12.07.2013, 00:11. Просмотров 720. Ответов 12
Метки нет (Все метки)

Есть файл, где все строки имеют такую структуру

XML
1
<object id="object (las2_lodbrigtower) (1)" interior="0" collisions="true" alpha="255" doublesided="true" model="5300" scale="1" dimension="0" background="" border="" foreground="" framesFaded="0" framesToFade="0" height="15" posX="111.75879" posY="4287.19629" posZ="1.77715" rotX="0" rotY="0" rotZ="0" state="hidden" text="Alpha Level" width="63" x="0" y="0"></object>
1. Снять данные с определенного участка в строке ( posY="4287.19629" )
2. из этого числа вычесть 5000
3. записать обратно результат (т.е. должно появится в строке вот это posY="-1287.19629")

P.S. каждое значение posY разное.

Добавлено через 9 минут
А так же прошу помочь в компилировании
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.07.2013, 00:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Считывание чисел, вычитание и запись в новый файл каждой строки (C++):

Снятие чисел с каждой строки, вычитание и запись - C++
Есть файл, где все строки имеют такую структуру &lt;object id=&quot;object (las2_lodbrigtower) (1)&quot; interior=&quot;0&quot; collisions=&quot;true&quot;...

Дан файл,компонентами его яв-ся числа.Число компонент делится на 2.Создать новый файл,куда будет записываться наименьшее из каждой пары чисел 1 файла - C++
#include &quot;fsteam&quot; #include &quot;iomanip&quot; using namespace std; int main() {ifstream in(&quot;f.txt&quot;); ofstream out(&quot;g.txt&quot;); int i; ...

Скопировать второе слово из каждой строки и вставить их в новый текстовый файл - C++
Добрый вечер, помогите, пожалуйста, в реализации простенькой программы: На входе .txt файл, в котором некое множество строк, состоящих...

Создать файл целых чисел содержащий сумму чисел из каждой строки исходной таблицы - C++
: Дан текстовый файл, содержащий таблицу из трех столбцов целых чисел. В начале и в конце каждой строки таблицы, а также между ее столбцами...

Чтение текста из файла, удаление каждой второй строки (\n), запись в файл - C++
Дана строка у текстовом файле input.txt: Teachers TV's resources Have generated views Teachers TV content is now available On TES...

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

12
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.07.2013, 01:14 #2
Цитата Сообщение от RAG20 Посмотреть сообщение
P.S. каждое значение posY разное.
Это что значит?

Добавлено через 1 минуту
Любое значение после posY= заменить на какое-то одно? Или на разные?
0
RAG20
0 / 0 / 0
Регистрация: 30.03.2013
Сообщений: 19
12.07.2013, 01:40  [ТС] #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Это что значит?

Добавлено через 1 минуту
Любое значение после posY= заменить на какое-то одно? Или на разные?
Это значит что в каждой новой строке posY разное. Оно может быть и 5678.45345 и 7000.76867
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.07.2013, 02:08 #4
Заменить на одно? На это: "-1287.19629" ? Запись в другой файл допустима?

Добавлено через 3 минуты
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
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <cstdlib>
using namespace std;    
    
int main()
{   
    ifstream fin ("infile" );
    ofstream fout("outfile");
    
    if (fin && fout)
    {
        string temp = "";
        stringstream s;
        string str_old = "posY=\"";
        string str_new = "posY=\"-1287.19629\"";
        
        while (true)
        {
            getline(fin, temp);
            if (temp.empty()) break;
            
            s << temp;
            while (true)
            {
                s >> temp;
                if (temp.empty()) break;
                if (temp.find(str_old) != -1)
                {
                    temp = str_new;
                }
                fout << temp << ' ';
                temp.clear();
            }
            fout << '\n';
            s.clear();
        }
 
        fin.close();
        fout.close();
    }
    else cout << "Error!" << endl;
    
    system("pause");
    return 0;
}
Если нужно, то можно старый файл удалить, а новому дать имя старого.
0
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
12.07.2013, 09:02 #5
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
#include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>
#include <sstream>
 
int main()
{
    std::fstream ifs("in.txt", std::ios::in), ofs("out.txt", std::ios::out);
    if(ifs.is_open() && ofs.is_open())
    {
        std::string tmp, posy("posY=\"");
        std::string::size_type ind = 0;
        double num = 0.;
        char* pendnum = 0;
        std::stringstream sstr;
        while(std::getline(ifs, tmp))
        {
            if((ind = tmp.find(posy)) != std::string::npos)
            {
                num = strtod(tmp.c_str() + ind + posy.size(), &pendnum);
                num -= 5000.;
                sstr << num;
                tmp.replace(ind + posy.size(), pendnum - &tmp[ind + posy.size()], sstr.str());
                sstr.clear();
                sstr.str("");
                ofs << tmp << '\n';
            }
        }
        ifs.close();
        ofs.close();
    }
    else
        std::cerr << "Unable to open file(s)\n";
    return 0;
}
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.07.2013, 13:02 #6
RAG20, мой код (4 пост) не то делает. Просмотрел уловие, что нужно 5000 вычесть.

Добавлено через 34 минуты
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
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <cstdlib>
using namespace std;    
    
int main()
{   
    ifstream fin ("infile.txt" );
    ofstream fout("outfile.txt");
    
    if (fin && fout)
    {
        string temp;
        stringstream s;
        s.precision(10);
        
        string str_old = "posY=\"";
        double m = 5000; // то что нужно вычесть
        int indbeg = 0;
        
        while (getline(fin, temp))
        {
            if ((indbeg = temp.find(str_old)) != -1)
             {
                string str;
                str.assign(temp, indbeg + str_old.size(), temp.size() - indbeg + str_old.size());
                
                s << str;
                double n;
                s >> n;
                
                getline(s, str);
                s.clear();
                s.str("");
                
                n -= m;
                s << n;
                
                temp = temp.erase(indbeg) + str_old + s.str() + str + "\n";
            }
            
            fout << temp;
            s.clear();
            s.str("");
        }
        fin.close();
        fout.close();
    }
    else cout << "Error!" << endl;
    
    system("pause");
    return 0;
}
Добавлено через 10 минут
igorrr37, есть два небольших замечания по коду. Точность для числа нужно добавить, а то обрезает, с округлением, до шести знаков. И второе. Может это в данном случае и несущественно (всего файла не видно), но если в строке не будет posY=", то такая строка не запишется в выходной файл. Запись в файл нужно из if() вынести.

Добавлено через 8 минут
Цитата Сообщение от RAG20 Посмотреть сообщение
1. Снять данные с определенного участка в строке ( posY="4287.19629" )
2. из этого числа вычесть 5000
3. записать обратно результат (т.е. должно появится в строке вот это posY="-1287.19629")
RAG20, это в результате каких подсчётов такое должно получиться? Если из 4287.19629 вычесть 5000, то получается -712,80371.
1
RAG20
0 / 0 / 0
Регистрация: 30.03.2013
Сообщений: 19
13.07.2013, 17:39  [ТС] #7
Простите что я вас покинул ненадолго, приболел. Теперь я вернулся.

1. В каждой строке обязательно будет параметр posY
2. Даже если значение будет отрицательным, то ничего страшного
0
RAG20
0 / 0 / 0
Регистрация: 30.03.2013
Сообщений: 19
17.07.2013, 23:21  [ТС] #8
alsav22,

прошу помочь((
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.07.2013, 00:01 #9
В чём? Коды выложены, работают. Или что-то не так?
0
RAG20
0 / 0 / 0
Регистрация: 30.03.2013
Сообщений: 19
18.07.2013, 00:04  [ТС] #10
Цитата Сообщение от alsav22 Посмотреть сообщение
В чём? Коды выложены, работают. Или что-то не так?
Цитата Сообщение от RAG20 Посмотреть сообщение
А так же прошу помочь в компилировании
Я дуб дубом в C++ . Пробовал сам в Microsoft Visual C++ - не получилось
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.07.2013, 00:07 #11
Что конкретно и как не получилось? .exe нужен?
1
RAG20
0 / 0 / 0
Регистрация: 30.03.2013
Сообщений: 19
18.07.2013, 00:55  [ТС] #12
Цитата Сообщение от alsav22 Посмотреть сообщение
Что конкретно и как не получилось? .exe нужен?
он самый
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.07.2013, 01:13 #13
Имена файлов в коде - 6 пост.
1
Вложения
Тип файла: rar code.rar (77.4 Кб, 2 просмотров)
18.07.2013, 01:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2013, 01:13
Привет! Вот еще темы с ответами:

Скопировать текстовый файл в новый файл, заменив в каждой строке слова «ok» на «*» - C++
Прошу помочь с задачей.Теории не было, сразу практика.Должны своими мозгами , но моих не хватает. Это последняя задача и завтра зачет.=/ ...

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

считывание и запись в файл - C++
вот написал программу на C++ builder в консоли, считывающую два числа и записывающую в файл их сумму. но она не работает, помогите советом....

Считывание и запись в файл - C++
Короче пытаюсь считать из одного файла цифру и записать ее в другой файл На то что после // не обращайте внимания эт я для себя писал))) ...


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

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

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