13.01.2010, 07:07
Quote:
|
Originally Posted by MX_Master
более мощные версии трёх моих же функций для извлечения праметров из строк, разделенных каким-то символом
sparam - извлекает подстроку под указанным номером, по желанию и вместе с остатком строки iparam - извлекает подстроку под указанным номером и возвращает ее численное значение fparam - извлекает подстроку под указанным номером и возвращает ее дробное (Float) значение даю код. в коде размер табуляции = 4. Code:
/*
ОПИСАНИЕ
Строка source[] будет разделена на несколько подстрок
с помощью символа delimiter. Нужная подстрока под номером (индексом)
substrIndex будет помещена в строку dest[]
ПАРАМЕТРЫ
dest[] сюда будет помещена нужная подстрока
maxSize макс. размер подстроки, которая будет помещена в dest[]
если длина подстроки больше maxSize, то она урежется
source[] исходная строка для разбиения и поиска в ней подстрок
delimiter символ, который будет делить исходную строку на подстроки
substrIndex порядковый номер (индекс) подстроки в исходной строке
withRest это логический флаг, если равен 1, то в dest[]
будут помещены все подстроки, начиная с указанного
индекса substrIndex. В том числе и все символы delimiter,
которые стоят между подстроками также будут включены в dest[]
ВОЗВРАЩАЕТ
ничего
ПРИМЕРЫ
new dest[128] = "something";
sparam( dest, 20, "/register 123456", ' ', 0 ); // dest = "/register"
sparam( dest, 20, "/register 123456", ' ', 1 ); // dest = "123456"
sparam( dest, 5, "/register 123456", ' ', 0 ); // dest = "/reg"
sparam( dest, 4, "/register 123456", ' ', 1 ); // dest = "123"
sparam( dest, 20, "/pm 29 Как дела, бро?", ' ', 0 ); // dest = "/pm"
sparam( dest, 4, "/pm 29 Как дела, бро?", ' ', 1 ); // dest = "29"
sparam( dest, 10, "/pm 29 Как дела, бро?", ' ', 2 ); // dest = "Как"
sparam( dest, 50, "/pm 29 Как дела, бро?", ' ', 2, 1 ); // dest = "Как дела, бро?"
sparam( dest, 10, "/pm 29 Как дела, бро?", ' ', 3 ); // dest = "дела,"
sparam( dest, 50, "/pm 29 Как дела, бро?", ' ', 3, 1 ); // dest = "дела, бро?"
sparam( dest, 10, "/pm 29 Как дела, бро?", ' ', 4 ); // dest = "бро?"
sparam( dest, 20, "91.235.141.89", '.', 0 ); // dest = "91"
sparam( dest, 20, "91.235.141.89", '.', 1 ); // dest = "235"
sparam( dest, 20, "91.235.141.89", '.', 2 ); // dest = "141"
sparam( dest, 20, "91.235.141.89", '.', 3 ); // dest = "89"
sparam( dest, 20, "91.235.141.89", '.', 1, 1 ); // dest = "235.141.89"
sparam( dest, 20, "91.235.141.89", '.', 2, 1 ); // dest = "141.89"
sparam( dest, 20, "/register 123456", ' ', -1 ); // dest = "", т.к. подстроки с таким индексом нет
sparam( dest, 20, "/register 123456", ' ', 7 ); // dest = "", т.к. подстроки с таким индексом нет
*/
stock sparam
(
dest[], maxSize = sizeof(dest),
const source[], delimiter = ' ',
substrIndex = 0, withRest = 0
)
{
dest[0] = 0; // очистим строку назначения
for ( new cur, pre, i = -1; ; cur++ ) // пробежимся по каждому символу в строке source
{
if ( source[cur] == 0 ) // если текущий символ в source - это символ конца строки
{
if ( ++i == substrIndex ) // если индекс текущей подстроки и есть sourceIndex
// скопируем в dest нужную подстроку из source
strmid( dest, source, pre, ( withRest ? strlen(source) : cur ), maxSize );
return; // завершим работу функции
}
if ( source[cur] == delimiter ) // если текущий символ в source - это символ для разделения строки
{
if ( ++i == substrIndex ) // если индекс текущей подстроки и есть sourceIndex
{
// скопируем в dest нужную подстроку из source
strmid( dest, source, pre, ( withRest ? strlen(source) : cur ), maxSize );
return; // завершим работу функции
}
pre = cur + 1;
}
}
}
/*
ОПИСАНИЕ
Строка source[] будет разделена на несколько подстрок
с помощью символа delimiter. И нужная подстрока под номером (индексом)
substrIndex будет возвращена функцией как число
ПАРАМЕТРЫ
source[] исходная строка для разбиения и поиска в ней подстрок
delimiter символ, который будет делить исходную строку на подстроки
substrIndex порядковый номер (индекс) подстроки в исходной строке
ВОЗВРАЩАЕТ
целочисленное значение подстроки
ПРИМЕРЫ
new number = 555;
number = iparam( "/givecash 23 50000", ' ', -1 ); // number = 0, т.к. подстроки с таким индексом нет
number = iparam( "/givecash 23 50000", ' ', 0 ); // number = 0
number = iparam( "/givecash 23 50000", ' ', 1 ); // number = 23
number = iparam( "/givecash 23 50000", ' ', 2 ); // number = 50000
number = iparam( "/givecash 23 50000", ' ', 3 ); // number = 0, т.к. подстроки с таким индексом нет
*/
stock iparam ( const source[], delimiter = ' ', substrIndex = 0 )
{
for ( new dest[12], cur, pre, i = -1; ; cur++ ) // пробежимся по каждому символу в строке source
{
if ( source[cur] == 0 ) // если текущий символ в source - это символ конца строки
{
if ( ++i == substrIndex ) // если индекс текущей подстроки и есть sourceIndex
strmid( dest, source, pre, cur, 12 ); // скопируем в dest нужную подстроку из source
return strval(dest); // завершим работу функции и вернем целочисленное значение подстроки
}
if ( source[cur] == delimiter ) // если текущий символ в source - это символ для разделения строки
{
if ( ++i == substrIndex ) // если индекс текущей подстроки и есть sourceIndex
{
strmid( dest, source, pre, cur, 12 );// скопируем в dest нужную подстроку из source
return strval(dest); // завершим работу функции и вернем целочисленное значение подстроки
}
pre = cur + 1;
}
}
}
/*
ОПИСАНИЕ
Строка source[] будет разделена на несколько подстрок
с помощью символа delimiter. И нужная подстрока под номером (индексом)
substrIndex будет возвращена функцией как дробное число
ПАРАМЕТРЫ
source[] исходная строка для разбиения и поиска в ней подстрок
delimiter символ, который будет делить исходную строку на подстроки
substrIndex порядковый номер (индекс) подстроки в исходной строке
ВОЗВРАЩАЕТ
дробное численное значение подстроки
ПРИМЕРЫ
new Float: float = 555.5;
float = iparam( "/goto -157.2 1248.25 10", ' ', -1 ); // float = 0.0, т.к. подстроки с таким индексом нет
float = iparam( "/goto -157.2 1248.25 10", ' ', 0 ); // float = 0.0, т.к. подстрока "/goto" это не число
float = iparam( "/goto -157.2 1248.25 10", ' ', 1 ); // float = -157.2
float = iparam( "/goto -157.2 1248.25 10", ' ', 2 ); // float = 1248.25
float = iparam( "/goto -157.2 1248.25 10", ' ', 3 ); // float = 10.0
float = iparam( "/goto -157.2 1248.25 10", ' ', 4 ); // float = 0.0, т.к. подстроки с таким индексом нет
*/
stock Float: fparam ( const source[], delimiter = ' ', substrIndex = 0 )
{
for ( new dest[40], cur, pre, i = -1; ; cur++ ) // пробежимся по каждому символу в строке source
{
if ( source[cur] == 0 ) // если текущий символ в source - это символ конца строки
{
if ( ++i == substrIndex ) // если индекс текущей подстроки и есть sourceIndex
strmid( dest, source, pre, cur, 40 ); // скопируем в dest нужную подстроку из source
return floatstr(dest); // завершим работу функции и вернем дробное численное значение подстроки
}
if ( source[cur] == delimiter ) // если текущий символ в source - это символ для разделения строки
{
if ( ++i == substrIndex ) // если индекс текущей подстроки и есть sourceIndex
{
strmid( dest, source, pre, cur, 40 );// скопируем в dest нужную подстроку из source
return floatstr(dest); // завершим работу функции и вернем дробное численное значение подстроки
}
pre = cur + 1;
}
}
}
|
при компиляции выдает предупреждение: warning 209: function "fparam" should return a value*

*Использую:
getdata = dini_Get(fcoords,"coord");
CP[0] = fparam(getdata,',',0);
CP[1] = fparam(getdata,',',1);
CP[2] = fparam(getdata,',',2);
SetPlayerPos(playerid,CP[0],CP[1],CP[2]);

