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

поиск в файле - C++

Восстановить пароль Регистрация
 
Kr
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 35
15.03.2013, 16:09     поиск в файле #1
Есть текстовый файл. Нужно в нем найти исходную комбинацию двух букв и заменить эти две буквы, теми двумя символами, которые стоят после этой комбинации, и эти 2 символа записать в новый файл.

sprintf(d[p], "%c%c\0", d2,c); // исходная комбинация
в file.txt находим эту комбинацию;
берем 2 следущих символа;
записываем эти 2 символа в file1.txt;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2013, 16:09     поиск в файле
Посмотрите здесь:

поиск в файле C++
Поиск в файле. C++
C++ Поиск в файле
C++ Поиск в файле.
C++ Поиск в файле
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
15.03.2013, 16:26     поиск в файле #2
Kr, найдите нужную подстроку (два символа), вытащите следующие две подстроки элементарным memcpy , запишите ващи символы в файл а потом с вставляйте свои слова.
Kr
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 35
15.03.2013, 16:58  [ТС]     поиск в файле #3
в файле записано следущее

aa fr
ab ew
..
ar aa
..
az de

допустим мне нужно найти комбинацию ab и заменить ее на ew. aa может встретиться во втором столбце (ar aa). мн
е нужно аа взять из первого столбца и заменить тем что стоит рядом через пробел во втором столбце.

C++
1
2
3
4
5
6
7
8
9
10
11
sprintf(d[p], "%c%c \0", d2,c); // допустим здесь ab
while(!feof(fp))
            {
                fgets(s,3,fp);
                temp=s;
                while(strstr(d[p], temp)!=NULL)
                   zam=temp;
                   fputs(zam, fp2);
                   temp++; // cдвигаем, чтобы еще нашел
                    
            }
исправьте пожалуйста что не так?
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
15.03.2013, 21:19     поиск в файле #4
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
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
 
using namespace std;
 
const char file_name_in[] = "c:\\1.txt" ;
const char file_name_out[] = "c:\\2.txt" ;
 
int main(){
 
    string str_all, str_tmp, str_fnd; // вся строка, временная переменная, искомое слово
    ifstream f_in;
    ofstream f_out;
 
    f_in.open(file_name_in);
    f_out.open (file_name_out);
 
    f_in >> str_fnd;
 
    while (!f_in.eof())        
    {
        f_in >> str_tmp;
        if (str_tmp[str_tmp.length() - 1] != ' ') // добавляем пробелы так как считывание идёт до пробела , а не до конца строки
            str_tmp += ' ';
        str_all += str_tmp;
    }
    cout << str_all <<endl;
 
    auto i_ptr = str_all.find(str_fnd); // цифровой индекс первого искомого слова
    auto i_ptr_beg = find(str_all.begin() + i_ptr, str_all.end(), ' ') + 1; // итератор на начало заменяещего (указывает на первый символ)
    auto i_ptr_end = find( i_ptr_beg, str_all.end() , ' ')  ;  // итератор на конец заменяещего (указывает на пробел)
    copy(i_ptr_beg,  i_ptr_end, str_tmp.begin());
 
    copy(i_ptr_beg,  i_ptr_end, str_all.begin() + i_ptr); // тут я расчитывал что всё поместится так как подстроки равны
    // если у вас подстроки не равны напишите мне или сами исправте этот кусок кода
 
    cout << str_all << endl;
 
    str_tmp.resize (i_ptr_end._Ptr - i_ptr_beg._Ptr + 1); // место выделяем сами так как копирование слепое
    copy(i_ptr_beg,  i_ptr_end, str_tmp.begin());
    
    f_out << str_tmp;
 
    f_in.close();
    f_out.close(); // будем хорошими программистами
 
 
    return 0;
}
Добавлено через 53 секунды
Kr, надеюсь перелопатить под себя сможете
Kr
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 35
15.03.2013, 23:01  [ТС]     поиск в файле #5
Решила сделать так: допустим нужно найти комбинацию ab, я записываю в массив что d[0]='a', d[1]='b'. Далее в цикле от 0 до 6 (каждая строка содержит 6 символов, анпрмиер, aa fr\n) считываю посимвольно все 6 символов и записываю какждый символ в массив st[6]. Далее, т.к. надо комбинацию ab найти в 1м столбце, то проверяю если st[0] и st[1] равны соответственно 'a' и 'b', то записываю в файл следущие 2 символа из строки после пробела.
Вроде все верно, в чем ошибка не пойму!


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
while (!feof(fp1))
                {
                   
                    for(l=0; l<6; l++)
                    {
 
                      fread(&x,sizeof(char),1,fp1);
                      st[l]=x;
                      printf("%c ", st[l]);  //!!!!!!!! что то не так, не выводит на экран символы
                    }
                    if((st[0]==d[0]) && (st[1]==d[1]))
                    {
                        fwrite(&st[3],sizeof(char),1,fp2);
                        fwrite(&st[4],sizeof(char),1,fp2);
 
                    }
                }
Yandex
Объявления
15.03.2013, 23:01     поиск в файле
Ответ Создать тему
Опции темы

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