-
Notifications
You must be signed in to change notification settings - Fork 6
/
ParseHelper.cpp
146 lines (114 loc) · 4.28 KB
/
ParseHelper.cpp
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include "Main.h"
#include "ParseHelper.h"
// Функция удаляет пробелы в начале и конце принятой строки
void allTrim(char *parseLine)
{
int i,j,k,pos=0;
if(parseLine==NULL)
{
printf("Function alltrim() call with NULL parameter!\n");
return;
}
// Определяется индекс последнего символа в строке
j=strlen(parseLine)-1;
// Если строка пустая и нуливой длины, ее обрабатывать ненужно
if(j<=0)
{
return;
}
// Пропуск пробелов в начале строки
for (i = 0; isspace(parseLine[i]); i++);
// Пропуск символов переноса строк в конце строки
for (; ((parseLine[j]=='\n') || (parseLine[j]=='\r') || (parseLine[j]==0)); j--);
// Пропуск пробелов в конце строки
for (; isspace(parseLine[j]); j--);
// Подготовка результата.
// Такая конструкция возможна, т.к. строка может смещаться только влево
for(k=i; k<=j; k++)
{
parseLine[pos++]=parseLine[k];
}
parseLine[pos]=0;
}
// Функция возвращает число с нужным номером из строки где числа разделены запятыми
// Нумерация выбираемого элемента идет с нуля
int getCommaSeparateValueInt(char *line, int n)
{
const char *delimeters= (char *) ",";
char *ptr;
char tmpLine[STRING_LEN];
// logprint("Function get_comma_separate_valuei() '%s' '%d'\n",line,n);
// Переданная строка копируется в рабочую строку чтобы ее не испортила функция strtok()
strcpy(tmpLine, line);
// Взятие первого элемента
ptr=strtok(tmpLine, delimeters);
// Если запрошен первый элемент
if(n==0)
{
// Если первый элемент (индекс 0) нормально обнаружен
if(ptr)
{
return atoi(ptr);
}
else
{
// printf("In get_comma_separate_valuei() first index not found\n");
return 0;
}
}
int i=1;
// Далее цикл если номер запрошенного элемента был вторым (индекс 1) или больше
while(ptr)
{
ptr=strtok(NULL, delimeters);
// Если указатель номально определен на данном этапе
// и выбранная подстрока имеет нужный индекс
if(ptr and i==n)
{
return atoi(ptr);
}
i++;
}
// printf("In get_comma_separate_valuei() index %d not found\n",i);
return 0;
}
// Функция взятия значения параметра из строки вида
// параметр=значение
// значение возвращается как строка
void getParameterValue(char *parseLine)
{
char tmpLine[STRING_LEN];
char *p;
strcpy(tmpLine, parseLine);
// Поиск позиции символа равенства
p=strchr(tmpLine, '=');
// Если указатель на символ равенства не равен NULL, значит символ найден
if(p!=NULL)
{
p++;
strcpy(parseLine, p); // Копирование результата в принятый массив
return;
}
parseLine[0]=0;
return;
}
// Функция взятия имени параметра из строки вида
// параметр=значение
// значение возвращается как строка
void getParameterName(char *parseLine)
{
for(int i=0; i<=strlen(parseLine); i++)
{
if(parseLine[i]=='=')
{
parseLine[i]=0; // На месте знака равенства устанавливается признак конца строки
return;
}
}
parseLine[0]=0;
return;
}