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

Вывести середину строк (между кавычками) в файл - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.94
BadBaddak
87 / 14 / 3
Регистрация: 09.06.2010
Сообщений: 100
16.02.2011, 22:52     Вывести середину строк (между кавычками) в файл #1
Есть файл. Из него читаю по строкам
if (strstr( s, "[FEN """)==s) ...
Как можно из каждой найденной такой строки вытянуть текст, находящийся между кавычками?
Из строчки [FEN "8/8/8/8/1Q6/1K6/8/2Nk4 w - - 0 1"] нужно выдернуть текст между кавычек 8/8/8/8/1Q6/1K6/8/2Nk4 w - - 0 1 и сохранить в файл с символом окончания строки. В итоге должен получится текстовый файл с несколькими такими строками.
Как лучше реализовать? Создать массив, потом его сохранять в файл. Или создать файл и построчно приписывать строки в конец файла?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dyosick
 Аватар для dyosick
61 / 61 / 6
Регистрация: 25.08.2008
Сообщений: 178
17.02.2011, 00:06     Вывести середину строк (между кавычками) в файл #2
Вроде работает, только не забудь указать правильный путь к файлу с текстом в строке:
C++
1
ifstream file("C:\\file.txt",ios::in);
А вот сам код:
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
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
 
using namespace std;
 
int main(int argc, char *argv[])
{
   ifstream file("C:\\file.txt",ios::in);
   ofstream new_file("C:\\new_file.txt",ios::out);
   char buf[255]; //буфер для чтения строки     
   
   if(!file)
   {
        cerr<<"Sorry, file could not be opened!!!"<<endl;
        system("pause");
        exit(1);         
   } 
    
    while(!file.eof())
    {
        //чтение строки из файла              
        file.getline(buf,sizeof(buf));
        string text=buf;
        
        int begin_pos=text.find("\"");//первое вхождение кавычек
        int end_pos=text.rfind("\"");//последнее вхождение кавычек
        
        for(int i=begin_pos+1;i<end_pos;i++)
        {
            new_file<<text[i];
            cout<<text[i];
        }
        new_file<<"\n";
        cout<<endl;
    }      
 
   system("pause");
   return 0;    
}
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
17.02.2011, 06:57     Вывести середину строк (между кавычками) в файл #3
C
1
if (strstr( s, "[FEN """)==s)
а что имеется в виду ?

C
1
    if (strstr(s, "[FEN \"\"") == s)
[FEN "8/8/8/8/1Q6/1K6/8/2Nk4 w - - 0 1"]
C
1
2
3
4
5
    const char *p = "[FEN \"8/8/8/8/1Q6/1K6/8/2Nk4 w - - 0 1\"]";
    char line[100];
 
    if (sscanf(p, "%*[^\"]\"%99[^\"]", line) == 1)
        printf("ok: %s\n", line);
ещё
[FEN "8/8/8/8/1Q6/1K6/8/2Nk4 w - - 0 1"]
C
1
2
3
4
5
6
    char buf[] = "[FEN \"8/8/8/8/1Q6/1K6/8/2Nk4 w - - 0 1\"]";
    char line[100];
 
    strtok(buf, "\"");
    strncpy(line, strtok(NULL, "\""), 99);
    line[99] = '\0';
strtok() требует проверки, так как может вернуть NULL
BadBaddak
87 / 14 / 3
Регистрация: 09.06.2010
Сообщений: 100
17.02.2011, 23:54  [ТС]     Вывести середину строк (между кавычками) в файл #4
Имеется в виду, что из файла (из большого) ищутся строки, начинающиеся с [FEN " символов. Перебираю в большом цикле.
И если фенка найдена, то эти буквы (которые расположены между кавычками) нужно скинуть в файл. Строчка не задаётся в коде, а читается каждый раз из файла.
с++ не понимаю Понял, что ищутся места кавычек и между ними запускается цикл переноса по букве в файл, после чего вставляется перенос строки.
Этим "" я пытался обозначить одинарную кавычку, но попробую и \"
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.02.2011, 01:39     Вывести середину строк (между кавычками) в файл #5
C
1
    if (strstr(s, "[FEN \"") == s)
Цитата Сообщение от BadBaddak
Этим "" я пытался обозначить одинарную кавычку, но попробую и \"
а получилось два строковых литерала, которые стоят рядом и конкатенируются в один строковой литерал

Цитата Сообщение от BadBaddak
Строчка не задаётся в коде, а читается каждый раз из файла.
ты всегда можешь задать её сначала в коде, чтобы правильно выстроить дальнейшую обработку, после чего переключить её на ввод из файла
BadBaddak
87 / 14 / 3
Регистрация: 09.06.2010
Сообщений: 100
26.02.2011, 17:49  [ТС]     Вывести середину строк (между кавычками) в файл #6
Ничего не понял.
Я в коде объявил char s[50];
В строчке if (strstr( s, "[FEN """)==s)... в массив s попадает вся строка.
Научился её выводить в файл fprintf ( fout, "%d %s", pos, s ); позиция по одному прибавляется, поэтому сначала идёт цифра по порядку. Строка печатается полностью вместе с переносом.
Но как теперь вместо всей строчки s напечатать то, что внутри кавычек? Вообще не понимаю, можно по порядку?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
27.02.2011, 06:21     Вывести середину строк (между кавычками) в файл #7
"[FEN """ - это "[FEN " пробелы ""

Цитата Сообщение от BadBaddak
Но как теперь вместо всей строчки s напечатать то, что внутри кавычек?
вот из этих примеров что не работает ? или что непонятно ?
BadBaddak
87 / 14 / 3
Регистрация: 09.06.2010
Сообщений: 100
27.02.2011, 15:52  [ТС]     Вывести середину строк (между кавычками) в файл #8
Непонятные команды. Пошел по циклам искать кавычки
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
//****************** вывод посимвольно из фенки
            int flag=0, k=0;
            printf ("fen = %s\n", s);
 
            for (k=0; k<50; k++){
                //printf ("k= %3d  ", k);
                //printf ("flag %d  ", flag);
                //printf ("simbol %c  \n", s[k]);
 
 
                if (s[k]=='"' && flag==0){ // если первые кавычки
                    //printf ("kavichki pervie\n");
                   flag=1;
                   continue;
                   }
 
                if (s[k]=='"' && flag==1){
                   //printf ("kavichki vtorie\n");
                   fprintf ( fout, "\n"); // конец фен строки
                   break;
                   }
 
                if (flag==1) {
                    //printf ("pishem\n");
                    fprintf ( fout, "%c", s[k] ); // вывод в файл буквы
 
                }
 
 
            }
Долго искал то, что в условии одиночный символ ставится в одиночные кавычки. А так вроде всё работает.
Sandir
1 / 1 / 0
Регистрация: 23.04.2013
Сообщений: 37
09.08.2014, 19:19     Вывести середину строк (между кавычками) в файл #9
А если есть похожая проблема, но то что между кавычек неизвестной длины и надо закинуть в какое-то временное хранилище, и только потом использовать. Думал о функции read, но возникают проблемы с длиной и типом буфера. Может подкинете идею, а то не хочется создавать новую тему.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
09.08.2014, 20:36     Вывести середину строк (между кавычками) в файл #10
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
#include <iostream>
#include <fstream>
#include <string>
#include <list>
#include <utility>
 
int main()
{
    std::ifstream ifs("in.txt");
    if(ifs.is_open())
    {
        std::string str;
        std::list<std::string> lst;
        for(char c; ifs.get(c); )
        {
            if('\"' == c)
            {
                for(; ifs.get(c) && '\"' != c; str += c)
                    ;
                std::cout << str << '\n';
                lst.push_back(std::move(str));
                str.clear();
            }
        }
    }
    else
        std::cerr << "Unable to open input file\n";
    return 0;
}
Sandir
1 / 1 / 0
Регистрация: 23.04.2013
Сообщений: 37
10.08.2014, 11:30     Вывести середину строк (между кавычками) в файл #11
Цитата Сообщение от igorrr37 Посмотреть сообщение
lst.push_back(std::move(str));
Говорит, move не является элементом std, хотя копипастил ваш код.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2014, 11:38     Вывести середину строк (между кавычками) в файл
Еще ссылки по теме:

C++ Дано число k (< 10) и текстовый файл, содержащий более k строк. Создать новый текстовый файл, содержащий k последних строк исходного файла
Дан файл. Надо отсортировать этот файл в порядке убывания длин его строк C++
Вывести файл на экран, чтобы в каждой строке было не больше 40 символов, и количество строк было минимальным C++

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

Или воспользуйтесь поиском по форуму:
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
10.08.2014, 11:38     Вывести середину строк (между кавычками) в файл #12
убери move вот так lst.push_back(str);
Yandex
Объявления
10.08.2014, 11:38     Вывести середину строк (между кавычками) в файл
Ответ Создать тему
Опции темы

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