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

Записать всю информацию из файла в другой файл - C++

Восстановить пароль Регистрация
 
virtuos553
 Аватар для virtuos553
48 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 247
Записей в блоге: 1
09.06.2014, 15:24     Записать всю информацию из файла в другой файл #1
в файл нужно записывать информацию , которая хранится после чисел -1 -1 55, ниже указан пример информации в файле
-1
-1
55
ufkahfku rhkauhkakhra hu ara

aa raw raw aw

-1
-1
55
wadhal wdh auw
a wd
wa d
ad


-1
-1
3333

aw dad qa wrwa


-1
-1
55
awdawdadad
adawd
aw
da

a
-1
-1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2014, 15:24     Записать всю информацию из файла в другой файл
Посмотрите здесь:

C++ Удалить ненужную информацию в конце файла, не создавая другой файл
как из файла записать данные в другой файл ??? C++
C++ Из текстового файла переписать информацию в другой текстовый файл
C++ Файл: Из текстового файла найти max и min элемент и записать в другой текстовой файл, не используя массив
C++ Из текстового файла прочитать четные числа и записать их в другой файл (С++)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
09.06.2014, 16:53     Записать всю информацию из файла в другой файл #2
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
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
 
int main()
{
    std::string str, temp;
    int index = 0;
    std::ifstream ifs("myFile.txt");
    std::ofstream ofs("output.txt");
    if(ifs)
    {
        while(getline(ifs, str)) { temp += str; }
        ifs.close();
        str = temp;
        temp.clear();
        if(ofs)
        {
            while(str[index])
            {
                if(str[index] == '-' && str.substr(index, 6) == "-1-155")
                {
                    index += 6;
                    while(str[index] != '-')
                    {
                        temp += str[index];
                        index++;
                    }
                    ofs << temp << std::endl;
                    temp.clear();
                    index--;
                }
                index++;
            }
            ofs.close();
        }
        else
            perror("Error");
    }
    else
        perror("Error");
    
    std::cout << "\nOperation succeeded\n";
    getch();  
    return 0;
}
virtuos553
 Аватар для virtuos553
48 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 247
Записей в блоге: 1
09.06.2014, 17:29  [ТС]     Записать всю информацию из файла в другой файл #3
проверил на своих файлах, у меня не записывает в другой файл, он все также пустой
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
09.06.2014, 17:38     Записать всю информацию из файла в другой файл #4
virtuos553, пути сходятся? Ошибки не выдаёт?
virtuos553
 Аватар для virtuos553
48 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 247
Записей в блоге: 1
09.06.2014, 18:25  [ТС]     Записать всю информацию из файла в другой файл #5
какие пути? нет , ошибок вообще нету, просто пустой файл

P.S. посмотрите мой вариант этой проги, но там минусов много очень

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
85
86
87
88
89
90
91
92
void func1 ()
 
{
 
    double n;
    double FREQUENCY;
    double Modedouble2;
    
    char c;
    string temp;
    string temp1;
    string temp2;
    string temp3;
    string temp4;
    
    ifstream fread("C:\\project\\LMS_ALL1.unv");
 
 
    vector<double> vectormode;
    if (fread)
    {ofstream fwrite("C:\\project\\test666.txt"); 
        while(!fread.eof())
        {
 
    label1: fread >> temp;
    
 
        if (temp == "-1")
 
        {
            fread >> temp1 >> temp2;
 
            if ((temp1 == "-1") && (temp == "-1") && (temp2 == "55"))
            {
                /*while ((fread >> temp4) && (temp4 != "FREQUENCY"));
                if (temp4 == "FREQUENCY")
                {
                    fread >> FREQUENCY;
                    fwrite << FREQUENCY << " ";
                    vectormode.push_back(FREQUENCY);
                    /*while ((input >> teemp) && (teemp != "Hz)"))
                    output << teemp << " ";
                    if (teemp == "Hz)")
                    output << teemp << "\n";
                    output << "\n";
                } */
                
            label:
                fread >> temp;
 
                if (temp == "\n")
                    fwrite << "\n";
                fwrite << temp << " ";
                if (temp == "-1")
                {
                    fread >> temp1;
                    if (temp1 == "-1")
                    {
                        fread >> temp2;
                        if (temp2 == "55")
                        {
                            fwrite << "\n" << "\n";
                            goto label;
 
                        }
                    /*  if(temp2=="EOF")
                        {
                            break;
                        }*/
 
                        else
                            goto label1;
 
                    }
                }
                else
                    goto label;
 
                    
 
                
 
            }
 
        }}
        fread.close();
        fwrite.close();
 
    }
    
    cout<<"DONE"<<"\n";
    }
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
09.06.2014, 18:38     Записать всю информацию из файла в другой файл #6
virtuos553, LMS_ALL1.unv - это ваш файл с которого надо считать?
Расширение *.unv не позволит этого сделать, если он открывается текстовиком, то вначале придётся
изменить расширение с *.unv в *.txt, выполнить операции и снова поменять расширение
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
09.06.2014, 18:40     Записать всю информацию из файла в другой файл #7
Цитата Сообщение от GuGo1991 Посмотреть сообщение
virtuos553, LMS_ALL1.unv - это ваш файл с которого надо считать?
Расширение *.unv не позволит этого сделать, если он открывается текстовиком, то вначале придётся
изменить расширение с *.unv в *.txt, выполнить операции и снова поменять расширение
Какая разница, какое расширение?
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
09.06.2014, 19:02     Записать всю информацию из файла в другой файл #8
Nekto, то есть не важно с какого рвсширения считывать?
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
09.06.2014, 19:20     Записать всю информацию из файла в другой файл #9
Цитата Сообщение от GuGo1991 Посмотреть сообщение
Nekto, то есть не важно с какого рвсширения считывать?
хоть с .exe
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
09.06.2014, 19:23     Записать всю информацию из файла в другой файл #10
Nekto, впервые такое слышу.
virtuos553, должно работать:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
 
int main()
{
    std::string str, temp, filename;
    int index = 0;
    
    char file[] = "myFile.unv"; // C:\\project\\LMS_ALL1.unv
    filename = file;
    filename = filename.substr(0, filename.find_last_of('.') + 1) + "txt";
    
    char* new_name = new char[filename.size() + 1];
    strcpy(new_name, filename.c_str());
    
    rename(file, new_name); //ГЊГҐГ*ГїГҐГ¬ Г°Г*ñøèðåГ*ГЁГҐ
 
    std::ifstream ifs(new_name);
    std::ofstream ofs("output.txt"); // C:\\project\\test666.txt
    if(ifs)
    {
        while(getline(ifs, str)) { temp += str + " "; }
        ifs.close();
        str = temp;
        temp.clear();
        if(ofs)
        {
            while(str[index])
            {
                if(str[index] == '-' && str.substr(index, 8) == "-1 -1 55")
                {
                    index += 8;
                    while(str[index] != '-')
                    {
                        temp += str[index];
                        index++;
                    }
                    index--;
                    ofs << temp << std::endl;
                    temp.clear();
                }
                index++;
            }
            ofs.close();
        }
        else
            perror("Error");
    }
    else
        perror("Error");
    
    rename(new_name, file); //ГЊГҐГ*ГїГҐГ¬ Г°Г*ñøèðåГ*ГЁГҐ îáðГ*ГІГ*Г®
    
    delete [] new_name;
    
    std::cout << "\nOperation succeeded\n";
    getch();  
    return 0;
}
virtuos553
 Аватар для virtuos553
48 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 247
Записей в блоге: 1
10.06.2014, 13:56  [ТС]     Записать всю информацию из файла в другой файл #11
я скидывал свой пример выше, studio спокойно читает unv напрямую, это же универсальный формат

Добавлено через 5 минут
strcpy(new_name, filename.c_str());

Он ругается на вот эту строку, код ошибки

Ошибка 1 error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\users\артемий\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\исходный код.cpp 16 1 ConsoleApplication1



P.S.


Мне нужно впринципе лишь пример как находить вот эти сообщения -1 -1 55 и записывать инфу хранящуюся там в файл, либо до след -1 -1 55 и тогда дальше продолжать опять записывать, или до -1 -1 и дальше любое число
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
10.06.2014, 15:20     Записать всю информацию из файла в другой файл #12
virtuos553, у меня лично *.unv не читает.
Цитата Сообщение от virtuos553 Посмотреть сообщение
Он ругается на вот эту строку, код ошибки
В настройках можно скинуть эту проблему.
Цитата Сообщение от virtuos553 Посмотреть сообщение
Мне нужно впринципе лишь пример как находить вот эти сообщения -1 -1 55 и записывать инфу хранящуюся там в файл, либо до след -1 -1 55 и тогда дальше продолжать опять записывать, или до -1 -1 и дальше любое число
Я делал следующим образом. Сначала всё из файла записал в переменную str. Далее в цикле while
C++
1
if(str[index] == '-' && str.substr(index, 6) == "-1-155")
находим первый элемент '-' и если 5 следующих элементов составляют -1-155, все последующие элементы
сохраняются в temp до элемента '-'.
Во втором примере всё то же самое, только учитываются ещё и пробелы (-1 -1 55).
У меня работает, иначе бы не выкладывал. Попробуйте протестировать с текстовиками.
virtuos553
 Аватар для virtuos553
48 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 247
Записей в блоге: 1
10.06.2014, 17:46  [ТС]     Записать всю информацию из файла в другой файл #13
дело в том , что этот файл очень огромный и хранить все в стринг переменной это не совсем правильно, и очень много места занимает, я пытаюсь как то организовать считывание файла и искать сразу эти -1 -1 55, и старатьсся за один проход файла все записывать
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
10.06.2014, 18:48     Записать всю информацию из файла в другой файл #14
virtuos553, ясно.
Вот так будет добавлять по "кускам":
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
#include <iostream>
#include <string>
#include <fstream>
#include <conio.h>
 
int main()
{
    std::string str, temp;
    int index = 0;
    std::ifstream ifs("myFile.txt");
    std::ofstream ofs("output.txt", std::ios_base::app);
    if(ifs)
    {
        while(!ifs.eof())
        {
            getline(ifs, temp);
            str += temp;
            if(str.size() >= 6 && str.substr(str.size() - 6) == "-1-155")
            {
                str.clear();
                temp.clear();
                if(ofs)
                {
                    while(temp != "-1")
                    {
                        ofs << temp << std::endl;
                        getline(ifs, temp);
                    }
                }
                else
                    perror("Error");
                str += temp;
            }
        }
        ifs.close();
        ofs.close();
    }
    else
        perror("Error");
    
    std::cout << "\nOperation succeeded\n";
    getch();
    return 0;
}
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
10.06.2014, 21:41     Записать всю информацию из файла в другой файл #15
Цитата Сообщение от GuGo1991 Посмотреть сообщение
virtuos553, у меня лично *.unv не читает.
Еще скажи, что у тебя скрыты расширения файлов и ты думаешь, что блокнотом можно только тхт файл открыть.
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
10.06.2014, 22:23     Записать всю информацию из файла в другой файл #16
Nekto, у вас какие-то проблемы? Я вас чем-то задел или как? Если вы уж такой придирчивый объясню
доходчивей:
C++
1
std::ifstream ifs("file.unv");
Выше указанная конструкция у меня не читает файл с подобным расширением (и я не жалуюсь).
И не будем начинать и тем более продолжать бессмысленные диалоги, тема не для этого создавалась.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2014, 08:00     Записать всю информацию из файла в другой файл
Еще ссылки по теме:

C++ Открыть файл, имя которого задается с клавиатуры. Посчитать количество байт в этом файле. Первую половину прочитанного файла записать в другой файл.
C++ Прочитать данные из xlsx файла и записать в другой файл
C++ Считать массив из файла, записать результаты в другой файл

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

Или воспользуйтесь поиском по форуму:
Trwsdf
Заблокирован
11.06.2014, 08:00     Записать всю информацию из файла в другой файл #17
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    ifstream init("C:\\1.txt", ios::in);
    init.unsetf(ios_base::skipws);
    ofstream result("C:\\result.txt", ios::out);
    if (init && result) {
        string templ = "-1\n-1\n55\n";
        char buf[templ.size()];
        ostream_iterator<char> out(result);
        istream_iterator<char> start(init);
        while (init.good()) {
            if (*start != '-')*out = *start++;
            else {
                int i = 0;
                do buf[i++] = *start++; while (i < templ.size() && init.good());
                if (templ.compare(string(buf, i))) std::copy(buf, &buf[i], out);
            };
        };
    };
Добавлено через 3 минуты
2 var -regex
Yandex
Объявления
11.06.2014, 08:00     Записать всю информацию из файла в другой файл
Ответ Создать тему
Опции темы

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