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

Как найти строку которая перед "=" и после - C++

Восстановить пароль Регистрация
 
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 371
23.01.2014, 07:46     Как найти строку которая перед "=" и после #1
Есть файл в котором:

C++
1
2
3
4
5
6
7
8
9
10
11
NAME = 338magnum
MAXCARRY = 30
PRICE = 125
BUYAMT = 10
 
................
 
NAME = 762nato
MAXCARRY = 90
PRICE = 80
BUYAMT = 30
Как мне записать строки после знака "=" ?

Добавлено через 22 минуты
Как найти строку которая перед = и после ? Точней я знаю strtok, но как верно не знаю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2014, 07:46     Как найти строку которая перед "=" и после
Посмотрите здесь:

C++ Как на языке "С" удалить в строке все цифры 3 перед первой точкой и заменить все '+' после певрой точки на '-'?
C++ Дана строка слов, разделенных пробелами. Сформируйте новую строку, вставив перед каждым вхождением слова "and" запятую
C++ error C2143: синтаксическая ошибка: отсутствие "]" перед ";"
error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "fprot" C++
C++ error C2143: синтаксическая ошибка: отсутствие ";" перед "using"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AntonChik
1083 / 581 / 21
Регистрация: 11.11.2008
Сообщений: 1,544
23.01.2014, 09:06     Как найти строку которая перед "=" и после #2
почитай про работу с ini файлами (файл настроек, файл конфигурации)
ИНИ-файл. Обработка файла. Строки.
либо
C++
1
2
3
#include <Windows.h>
 
GetPrivateProfileString("имя секции", "имя ключа", "строка по дефолту", out_string, "c:\config.ini");
gazlan
2867 / 1815 / 272
Регистрация: 27.08.2010
Сообщений: 4,921
Записей в блоге: 1
23.01.2014, 09:57     Как найти строку которая перед "=" и после #3
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
int main(int argc,char** argv)
{
   FILE*    pIn = fopen("test.txt","rt");
 
   if (!pIn)
   {
      // Error !
      return 0;
   }
 
   char     pszLine[MAX_PATH + 1];
 
   while (fgets(pszLine,MAX_PATH,pIn))
   {
      char*    pEQ = strchr(pszLine,'=');
 
      if (pEQ)
      {
         *pEQ = 0; // Cut here !
 
         printf("Before: %s, ",pszLine);
         printf("After: %s",pEQ + 1);
      }
   }
   
   fclose(pIn);
 
   return 0;
}
Миниатюры
Как найти строку которая перед "=" и после  
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 371
23.01.2014, 11:35  [ТС]     Как найти строку которая перед "=" и после #4
AntonChik, я знаю как работать с фалами. Я не знал как отпарсить строки как и показал gazlan.

Большое спасибо.

Добавлено через 1 час 0 минут
Можете еще подсказать, почему у меня появляется один лишний символ в pszRight, пробел, я ведь его удаляю?

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
static char pszLine[ 256 ], pszLeft[32], pszRight[32];
    
    while( pFile && !feof( pFile ) )
    {
        fgets(pszLine, sizeof(pszLine)-1, pFile);
        
        if( !pszLine[ 0 ] || pszLine[ 0 ] == ';' || pszLine[ 0 ] == '/' )
        {
            continue;
        }
        
        char*    pEQ = strchr(pszLine,'=');
 
        if (pEQ)
        {
            *pEQ = 0; // Cut here !
 
            strcpy( pszLeft, pszLine );
            strcpy( pszRight, pEQ + 1);
 
        }
 
        TrimString( pszLeft, true, true );
        TrimString( pszRight, true, true );
 
        printf( "%s | %s = %d\n", pszLeft, pszRight, strlen(pszRight) );
    }
    
    
    if( pFile )
    {
        fclose( pFile );
    }   
}
 
bool TrimString(char * Input, bool TrimSpaces = false, bool TrimTabs = false)
{
    if (Input)
    {
        while (isspace(*Input) || (TrimSpaces && *Input == ' ') || (TrimTabs && *Input == '\t'))
            Input++;
 
        for (size_t Iterator = strlen(Input) - 1U; Iterator || !Iterator; Iterator--)
        {
            if (isspace(Input[Iterator]) || (TrimSpaces && Input[Iterator] == ' ') || (TrimTabs && Input[Iterator] == '\t'))
                Input[Iterator] = 0U;
            else
                break;
        }
 
        return true;
    }
 
    return false;
}
gazlan
2867 / 1815 / 272
Регистрация: 27.08.2010
Сообщений: 4,921
Записей в блоге: 1
23.01.2014, 13:42     Как найти строку которая перед "=" и после #5
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
93
94
95
96
97
98
99
100
101
bool Jammer(char* pSrc,int& riSize)
{
   if (IsBadReadPtr(pSrc,riSize))
   {
      // Error !
      return false; 
   }
 
   for (int ii = 0; ii < riSize; ++ii)
   {  
      switch (pSrc[ii])
      {
         case '\t':  // Replace Tabs with Space
         {
            pSrc[ii] = ' ';
            break;
         }
         case '\r':  // Replace CR with Space
         {
            pSrc[ii] = ' ';
            break;
         }
         case '\n':  // Replace LF with Space
         {
            pSrc[ii] = ' ';
            break;
         }
         default:
         {
            // Do nothing !
            break;
         }
      }
   }
   
   // Remove Leading Spaces
   char*    pBegin = pSrc;
 
   while (pBegin && *pBegin == ' ' && riSize)
   {
      ++pBegin;
      --riSize;
   }
 
   char*    pEnd = pBegin + riSize - 1; 
 
   // Proceed trailing zeros if any
   while (!*pEnd && riSize)
   {
      --pEnd;
      --riSize;
   }
 
   // Remove Trailing Spaces
   while (pEnd && *pEnd == ' ' && riSize)
   {
      --pEnd;
      --riSize;
   }
 
   char*    pTemp = new char[riSize + 1];
 
   if (!pTemp)
   {
      // Error !
      return false; 
   }
 
   memset(pTemp,0,riSize);
 
   int      jj = 0;
 
   for (ii = 0; ii < riSize; ++ii)
   {
      // Remove Duplicated Spaces
      if (pBegin[ii] == ' ')
      {
         // Very first - just copy
         pTemp[jj++] = pBegin[ii++];                   
 
         while (pBegin[ii] == ' ')
         {
            ++ii;  // Skip !
         }
      }
 
      // Just Copy
      pTemp[jj++] = pBegin[ii]; 
      pTemp[jj]   = 0;    // ASCIIZ
   }
 
   riSize    = jj;
   pTemp[jj] = 0;    // ASCIIZ
 
   memcpy(pSrc,pTemp,riSize + 1);   // With trailing ZERO !
 
   delete pTemp;
   pTemp = NULL;
 
   return true;
}
Добавлено через 28 минут
Поправил ваш вариант.

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
static bool TrimString(char* pszInput)
{
   if (!pszInput || !*pszInput)
   {
      // Nothing to do !
      return false;
   }
 
   int   iSkip = 0;
 
   while (isspace(pszInput[iSkip]))
   {
      ++iSkip;
   }
 
   int   iLen = strlen(pszInput);
 
   memmove(pszInput,&pszInput[iSkip],iLen - iSkip);
 
   int   iLast = strlen(pszInput) - 1;
 
   while ((iLast >= 0) && (isspace(pszInput[iLast])))
   {
      pszInput[iLast--] = 0;
   }
 
   return true;
}
 
int main(int argc,char** argv)
{
   char  pszTest[MAX_PATH + 1];
 
   strcpy(pszTest,"   test   ");
 
   TrimString(pszTest);
 
   return 0;
}
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 371
23.01.2014, 21:09  [ТС]     Как найти строку которая перед "=" и после #6
gazlan, у меня маленький не дочет, файл:

HTML5
1
2
AMMONAME = 9mm
VIEWMODEL = models/weapons/v_model.mdl
Получаю:

AMMONAME
dll


А вот написал для теста вместо models/weapons/v_model.mdl , blablabla

Вывело VIEWMODEL нормально. Из-за models/weapons/v_model.mdl почему-то идет какое-то нарушение.
gazlan
2867 / 1815 / 272
Регистрация: 27.08.2010
Сообщений: 4,921
Записей в блоге: 1
23.01.2014, 21:30     Как найти строку которая перед "=" и после #7
Я уже все стер давно :-). Сейчас соберу заново проект и напишу.
gazlan
2867 / 1815 / 272
Регистрация: 27.08.2010
Сообщений: 4,921
Записей в блоге: 1
23.01.2014, 21:42     Как найти строку которая перед "=" и после #8
На всякий случай, в эташе весь проект - кое-что изменил, по мелочи.
Миниатюры
Как найти строку которая перед "=" и после  
Вложения
Тип файла: 7z TEST.7z (4.3 Кб, 2 просмотров)
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 371
23.01.2014, 22:10  [ТС]     Как найти строку которая перед "=" и после #9
Да, все работает на отлично, но вот у меня косяк, что же не так я делаю?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        
        char pszLine[ 256 ], pszLeft[32], pszRight[32]; 
        char* pStrchr = strchr(pszLine,'=');
 
        if (pStrchr)
        {
            *pStrchr = 0; // Cut here !
 
 
            strcpy( pszLeft, TrimString( pszLine ) );
            strcpy( pszRight, TrimString( pStrchr + 1 ));
 
            printf("%s\n", pszLeft);
        }
Так выводит VIEWMODEL отлично. Но так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        
        char pszLine[ 256 ], pszLeft[32], pszRight[32]; 
        char* pStrchr = strchr(pszLine,'=');
 
        if (pStrchr)
        {
            *pStrchr = 0; // Cut here !
 
 
            strcpy( pszLeft, TrimString( pszLine ) );
            strcpy( pszRight, TrimString( pStrchr + 1 ));
 
            printf("%s --- %s \n", pszLeft, pszRight);
        }

Выводит: dl --- models/v_weapon.mdl


Что это за ерунда, почему вдруг вместо VIEWMODEL начало писать dll не понятно откуда-то взявшегося ?

Но уже так:

C++
1
2
    printf("pszLeft %s \n", pszLeft);
printf("pszRight %s \n", pszRight);
Выводит нормально. Что это за мистика ? Почему в одну строку выводит ерунду ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2014, 00:05     Как найти строку которая перед "=" и после
Еще ссылки по теме:

C++ Ошибка экземпляра класса: отсутствие ";" перед идентификатором "o_scenes_1"
Error C2143: синтаксическая ошибка: отсутствие ";" перед "<<" C++
Найти все вхождения в строку последовательности символов "сто" и заменить на "100" C++

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

Или воспользуйтесь поиском по форуму:
gazlan
2867 / 1815 / 272
Регистрация: 27.08.2010
Сообщений: 4,921
Записей в блоге: 1
24.01.2014, 00:05     Как найти строку которая перед "=" и после #10
pszLeft[32], pszRight[32] -> надо увеличить размер буфера, до 256, например.
Yandex
Объявления
24.01.2014, 00:05     Как найти строку которая перед "=" и после
Ответ Создать тему
Опции темы

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