Распарсить txt файл и получить текст в фигурных скобках - C (СИ)
Формулировка задачи:
Есть текстовый файл вида:
Как мне вырезать только текст который заключен в фигурные кавычки? Только это:
Можно обрезать весь текст до символа '{' и закончить на символе '}'. Помогите!
#This configuration file was written by: org.eclipse.equinox.internal.frameworkadmin.equinox.EquinoxFwConfigFileParser
#Thu Jun 12 03:28:49 EDT 2014
/*
org.eclipse.update.reconcile=false
eclipse.p2.profile=epp.package.cpp
osgi.instance.area.default=@user.home/workspace
osgi.framework=file\:plugins/org.eclipse.osgi_3.10.0.v20140606-1445.jar
equinox.use.ds=true
eclipse.buildId=4.4.0.I20140606-1215
*/
const int BL = 365;
const real32_T B[365] = {
-8.65677805e-007,-6.129384928e-007,-1.283507061e-007,6.594647743e-007,1.664639512e-006,
2.537618002e-006,2.717235702e-006,1.664022989e-006,-8.035377164e-007,-4.227551926e-006,
-7.457241736e-006,-8.928994248e-006,-7.250429007e-006,-1.905289537e-006,
6.21045092e-006,1.471245287e-005,2.027619485e-005,1.974537372e-005,1.148136107e-005,
-3.545642357e-006,-2.143744496e-005,-3.61411112e-005,-4.126860949e-005
};-8.65677805e-007,-6.129384928e-007,-1.283507061e-007,6.594647743e-007,1.664639512e-006, 2.537618002e-006,2.717235702e-006,1.664022989e-006,-8.035377164e-007,-4.227551926e-006, -7.457241736e-006,-8.928994248e-006,-7.250429007e-006,-1.905289537e-006, 6.21045092e-006,1.471245287e-005,2.027619485e-005,1.974537372e-005,1.148136107e-005, -3.545642357e-006,-2.143744496e-005,-3.61411112e-005,-4.126860949e-005
Решение задачи: «Распарсить txt файл и получить текст в фигурных скобках»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
static const char pszText[] =
"\
#This configuration file was written by: org.eclipse.equinox.internal.frameworkadmin.equinox.EquinoxFwConfigFileParser\
#Thu Jun 12 03:28:49 EDT 2014\
/*\
org.eclipse.update.reconcile=false\
eclipse.p2.profile=epp.package.cpp\
osgi.instance.area.default=@user.home/workspace\
osgi.framework=file\\:plugins/org.eclipse.osgi_3.10.0.v20140606-1445.jar\
equinox.use.ds=true\
eclipse.buildId=4.4.0.I20140606-1215\
*/\
const int BL = 365;\
const real32_T B[365] = {\
-8.65677805e-007,-6.129384928e-007,-1.283507061e-007,6.594647743e-007,1.664639512e-006,\
2.537618002e-006,2.717235702e-006,1.664022989e-006,-8.035377164e-007,-4.227551926e-006,\
-7.457241736e-006,-8.928994248e-006,-7.250429007e-006,-1.905289537e-006,\
6.21045092e-006,1.471245287e-005,2.027619485e-005,1.974537372e-005,1.148136107e-005,\
-3.545642357e-006,-2.143744496e-005,-3.61411112e-005,-4.126860949e-005\
};\
";
int main(int argc,char** argv)
{
char* pData = (char*)calloc(strlen(pszText) + 1,1);
if (pData)
{
strcpy(pData,pszText);
char* pBegin = strchr(pData,'{');
char* pEnd = strchr(pData,'}');
if (pBegin && pEnd && (pEnd > pBegin))
{
*pEnd = 0;
printf("%s\n",pBegin + 1);
}
free(pData);
}
return 0;
}
Объяснение кода листинга программы
- В коде представлен текст, написанный на языке C.
- Он содержит исходные данные в виде строки
pszText, которая представляет собой содержимое текстового файла. - Данные включают информацию о конфигурации, такую как идентификатор сборки, имя профиля, область памяти по умолчанию и т.д.
- Также в данных присутствуют значения, представленные в виде массива
B[365]. - Значения массива
Bпредставляют собой числа с плавающей точкой, которые, вероятно, используются для представления временных меток. - В функции
mainвыделена память для хранения содержимогоpszTextс помощью функцииcalloc. - Содержимое
pszTextкопируется в выделенную память с помощью функцииstrcpy. - Затем в функции
mainищутся символы `{' и '}', которые обозначают начало и конец блока текста, который нужно распечатать. - Если символы найдены и находятся в правильном порядке, то символ
}заменяется на ноль, чтобы отделить блок текста. - Затем распечатывается содержимое между символами
{' и '}', начиная с первого символа после{'`. - В конце функции
mainосвобождается выделенная память с помощью функцииfree. - Функция
mainвозвращает значение 0, что означает успешное выполнение программы.