С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/40: Рейтинг темы: голосов - 40, средняя оценка - 4.93
90 / 17 / 4
Регистрация: 09.06.2010
Сообщений: 100

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

16.02.2011, 22:52. Показов 8670. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть файл. Из него читаю по строкам
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 и сохранить в файл с символом окончания строки. В итоге должен получится текстовый файл с несколькими такими строками.
Как лучше реализовать? Создать массив, потом его сохранять в файл. Или создать файл и построчно приписывать строки в конец файла?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.02.2011, 22:52
Ответы с готовыми решениями:

Вывести на экран набор символов, размещенных между данными кавычками.
Здравствуйте. нужно сдать задачи на зачет, но есть проблема: я очень плохо разбираюсь в программировании. помогите пожалуйста =) ...

Cимволы между одинарными кавычками
Есть паттерн на .NET для извлечения символов между одинарными кавычками '(?:\\'|)*' Пробовал так, но не работает: ...

Копирование текста между кавычками
Borland C++ 6. Как в Memo1 найти текст между кавычками и копировать в Edit1 ?%-)

11
 Аватар для dyosick
64 / 64 / 17
Регистрация: 25.08.2008
Сообщений: 178
17.02.2011, 00:06
Вроде работает, только не забудь указать правильный путь к файлу с текстом в строке:
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;    
}
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
17.02.2011, 06:57
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
0
90 / 17 / 4
Регистрация: 09.06.2010
Сообщений: 100
17.02.2011, 23:54  [ТС]
Имеется в виду, что из файла (из большого) ищутся строки, начинающиеся с [FEN " символов. Перебираю в большом цикле.
И если фенка найдена, то эти буквы (которые расположены между кавычками) нужно скинуть в файл. Строчка не задаётся в коде, а читается каждый раз из файла.
с++ не понимаю Понял, что ищутся места кавычек и между ними запускается цикл переноса по букве в файл, после чего вставляется перенос строки.
Этим "" я пытался обозначить одинарную кавычку, но попробую и \"
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
18.02.2011, 01:39
C
1
    if (strstr(s, "[FEN \"") == s)
Цитата Сообщение от BadBaddak
Этим "" я пытался обозначить одинарную кавычку, но попробую и \"
а получилось два строковых литерала, которые стоят рядом и конкатенируются в один строковой литерал

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

Цитата Сообщение от BadBaddak
Но как теперь вместо всей строчки s напечатать то, что внутри кавычек?
вот из этих примеров что не работает ? или что непонятно ?
0
90 / 17 / 4
Регистрация: 09.06.2010
Сообщений: 100
27.02.2011, 15:52  [ТС]
Непонятные команды. Пошел по циклам искать кавычки
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] ); // вывод в файл буквы
 
                }
 
 
            }
Долго искал то, что в условии одиночный символ ставится в одиночные кавычки. А так вроде всё работает.
0
1 / 1 / 0
Регистрация: 23.04.2013
Сообщений: 37
09.08.2014, 19:19
А если есть похожая проблема, но то что между кавычек неизвестной длины и надо закинуть в какое-то временное хранилище, и только потом использовать. Думал о функции read, но возникают проблемы с длиной и типом буфера. Может подкинете идею, а то не хочется создавать новую тему.
0
 Аватар для igorrr37
2872 / 2019 / 991
Регистрация: 21.12.2010
Сообщений: 3,743
Записей в блоге: 9
09.08.2014, 20:36
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;
}
0
1 / 1 / 0
Регистрация: 23.04.2013
Сообщений: 37
10.08.2014, 11:30
Цитата Сообщение от igorrr37 Посмотреть сообщение
lst.push_back(std::move(str));
Говорит, move не является элементом std, хотя копипастил ваш код.
0
 Аватар для igorrr37
2872 / 2019 / 991
Регистрация: 21.12.2010
Сообщений: 3,743
Записей в блоге: 9
10.08.2014, 11:38
убери move вот так lst.push_back(str);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.08.2014, 11:38
Помогаю со студенческими работами здесь

Разница между двойными и одинарными кавычками
извините за глупый вопрос какая разница между двойными и одинарными кавычками ? и какие лучше применять в echo ?

Поиск текста между кавычками в строке
Здравствуйте уважаемые! Извините за вопрос - но облазил форум но конкретно моего случая не нашел... Есть очень похожие но. только учусь а...

Изменение текста в Word, заключенного между кавычками
Не могу разобраться в коде. Надо чтобы он во всем тексте word нашел все между кавычками « и » и изменил шрифт на ЖИРНЫЙ и КУРСИВ ...

Регулярное выражение, получить значение между кавычками
Пожалуйста сделайте регулярное выражение, чтобы вытащить: RealmID 2f25f47879a3b12d3684af1dd8703543 auth // regex_parse.cpp //...

Как можно сделать функцию, которая выводит все слова между кавычками!
как можно сделать функцию, которая выводит все слова между кавычками! Создаю новый проект, но вот застрял, не могу додуматься, как выводить...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru