[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Программирование: Разработка и отладка программ


Обработка данных с учетом национальных стандартов

Учет особенностей национальных языков при обработке данных может быть реализован как часть программы, которая в этом случае сможет предоставлять различные данные для разных локалей. Кроме того, в программе могут применяться различные алгоритмы обработки текстовых данных, соответствующие особенностям различных национальных языков и стандартов. Например, алгоритмы определения начала и конца слова, а также правила переноса слов различны в разных локалях. Программы, поддерживающие подобные функции, должны на этапе исполнения работать с таблицами или алгоритмами, выбираемыми на основании текущего значения локали. Для этого могут применяться следующие способы:

Таблицы для обработки данных с учетом национальных стандартов

Если обработку данных с учетом национальных стандартов можно организовать с помощью таблиц, загружаемых в соответствии со значением локали, то программа может быть реализована с помощью стандартных функций ввода-вывода (fopen, fread, open, read и т.д.). Таблицы должны размещаться в каталоге, который определен в /usr/lpp/Имя, где Имя - это имя приложения в одной из подходящих локалей.

Стандартный префикс пути: /usr/lpp/Имя (путь в AIX)
Каталог поддержки национальных языков: Получите значение текущей локали для категории, описывающей нужные таблицы. Объедините его с приведенным выше префиксом.
Доступ: Используйте стандартные функции работы с файлами (fopen,fread, и т.д.).

Алгоритмы обработки данных с учетом национальных стандартов

Алгоритмы, обеспечивающие поддержку национальных языков, хранятся в каталоге /usr/lpp/имя/%L. Здесь %L обозначает текущее значение локали для соответствующей категории.

Системный вызов load позволяет загружать алгоритмы из объектных модулей.

Стандартный префикс пути: /usr/lpp/имя
Каталог поддержки национальных языков: Получите значение текущей локали для нужной категории. Объедините его с приведенным выше префиксом.
Метод: Добавьте к строке имя метода.

Пример: Загрузка модуля поддержки арабского языка

Файл заголовков

Файл methods.h определяет следующую структуру:

struct Methods {
        int     version;
        char    *(*hyphen)();
        char    *(*wordbegin)();
        char    *(*wordend)();
} ;

Основная программа

Имя главной программы в примере - textpr.

Главная программа определяет, какой модуль следует загрузить, и вызывает его методы. Обратите внимание, что файл заголовка textpr.h содержит путь к загружаемому модулю. Таким образом путь, который зависит от операционной системы, можно легко изменить.

#include    <stdio.h>
#include    <errno.h>
#include    "methods.h"
#include    "textpr.h"    /* содержит путь
                             к загружаемым объектам */

extern int errno;

main()
{
     char libpath[PATH_MAX];   /* содержит полный путь
                                               к загружаемому объекту */
      char *prefix_path=PREFIX_PATH;        /* из textpr.h */
      char *method=METHOD;                  /* из textpr.h */
      int (*func)();
      char *path;
      /* Methods */
      int   ver;
      char  *p;
      struct Methods *md;
      
  
      setlocale(LC_ALL, "");

      path = setlocale(LC_CTYPE, 0);    /* Получить значение локали 
                                         для категории LC_CTYPE */
      /* Создать строку полного пути */
      /* к загружаемому объекту      */
      strcpy(libpath, prefix_path);
      strcat(libpath, path);
      strcat(libpath, "/");
      strcat(libpath, method);
   
      func = load(conv, 1, libpath);        /* Загрузить объект */
      if(func==NULL){
            strerror(errno);
            exit(1);
      }
      /* вызвать методы загруженного объекта */
      md =(struct Methods *) func();       /* Получить указатель
                                              на структуру методов */
      ver = md->version;
      /* Вызывать требуемые методы */
      p = (md->hyphen)();
      p = (md->wordbegin)();
      p = (md->wordend)();
}

Методы

Этот модуль содержит алгоритмы поддержки национальных языков. В данном примере модуль описывает методы поддержки арабского языка. Ниже приведен текст программы method.c:

#include    "methods.h"

char *Arabic_hyphen(char *);
char *Arabic_wordbegin(char *);
char *Arabic_wordend(char *);

static struct Methods ArabicMethods= {
        1,
        Arabic_hyphen,
        Arabic_wordbegin,
        Arabic_wordend
} ;

struct Methods *start_methods()
{
        /* инициализация методов */
        return ( &ArabicMethods);
}

char *Arabic_hyphen(char *string)
{
        /* перенос для арабского языка */
        return( string);
}
char *Arabic_wordbegin(char *string)
{
        /* Определение начала слова для арабского языка */
        return( string);
}
char *Arabic_wordend(char *string)
{
        /* определение конца слова для арабского языка */
        return( string);
}

Файл заголовка: textpr

Этот файл заголовка определяет путь к загружаемому модулю.

#define PREFIX_PATH "/usr/lpp/textpr"   
                    /* Указан путь для системы AIX */

Связанная информация

Глава 16, Поддержка национальных языков.


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]