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

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

Восстановить пароль Регистрация
 
RAG20
0 / 0 / 0
Регистрация: 30.03.2013
Сообщений: 19
12.07.2013, 00:11     Считывание чисел, вычитание и запись в новый файл каждой строки #1
Есть файл, где все строки имеют такую структуру

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 минут
А так же прошу помочь в компилировании
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.07.2013, 01:14     Считывание чисел, вычитание и запись в новый файл каждой строки #2
Цитата Сообщение от RAG20 Посмотреть сообщение
P.S. каждое значение posY разное.
Это что значит?

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

Добавлено через 1 минуту
Любое значение после posY= заменить на какое-то одно? Или на разные?
Это значит что в каждой новой строке posY разное. Оно может быть и 5678.45345 и 7000.76867
alsav22
5282 / 4801 / 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;
}
Если нужно, то можно старый файл удалить, а новому дать имя старого.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 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;
}
alsav22
5282 / 4801 / 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.
RAG20
0 / 0 / 0
Регистрация: 30.03.2013
Сообщений: 19
13.07.2013, 17:39  [ТС]     Считывание чисел, вычитание и запись в новый файл каждой строки #7
Простите что я вас покинул ненадолго, приболел. Теперь я вернулся.

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

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

C++ Скопировать текстовый файл в новый файл, заменив в каждой строке слова «ok» на «*»
C++ Снятие чисел с каждой строки, вычитание и запись
C++ Создать файл целых чисел содержащий сумму чисел из каждой строки исходной таблицы

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.07.2013, 01:13     Считывание чисел, вычитание и запись в новый файл каждой строки #13
Имена файлов в коде - 6 пост.
Вложения
Тип файла: rar code.rar (77.4 Кб, 2 просмотров)
Yandex
Объявления
18.07.2013, 01:13     Считывание чисел, вычитание и запись в новый файл каждой строки
Ответ Создать тему
Опции темы

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