Есть подозрения что в падении виновата UDF
Посмотрите ее текст ибо я уже совсем не соображаю
да и в С совсем плох
-----------------------------------------------------------

// Возврат из строки str
// слова с номером по порядку number (подсчет начинается с 1)
// separator - символ разделитель Если > 1 символа то берется первый символ
// Если 0 символов или NULL то за символ разделитель берется запятая
// если входная строка пустая (NULL) или нулевой длины то возвращается
// указатель NULL
// если number <=0 или >количества слов то возвращается
// указатель NULL
// память под результат не выделяется ==> FREE_IT в описании использовать не надо
char* Gr_Find_Word(char* str, int* number, char* separator)
{
char* find_word;
int len_word;
int start_word;
char separator_char;
int i;
int count;

if (!separator || !*separator) separator_char=',';
else separator_char=*separator;

find_word=NULL;
if (str && *str && *number > 0)
{
 for(count=1,len_word=0,start_word=0,i=0;str[i];i++)
 {
  if (str[i] == separator_char) {
    count=count+1;
    if (count == *number) start_word=i+1;
   }
  else {
    if (count == *number) len_word=len_word+1;
  }
 }

 if (*number <= count) {
   find_word=str;
   if (start_word)
for(i=start_word;str[i] && str[i] != separator_char;i++) find_word[i-start_word]=str[i];
   find_word[len_word]='\0';
 }
}

return find_word;
}
-----------------------------------------------------------

Макмак

Ответить