Сайт AZJIO
Главная | Регистрация | Вход Приветствую Вас Гость | RSS
Меню сайта
Категории раздела
Скрипты для LiveCD [0]
Скрипты для WindowsXP [8]
Примеры скриптов [15]
Функции [5]
Поиск
Главная » Статьи » Скрипты AutoIt3 » Скрипты для WindowsXP

Разделители

Разделители


Довольно часто предстаёт выбор разделителя при хранении данных с разметкой. Обычно такими свойствами обладает база данных. Но не всегда требуется усложнять код, если необходимо разделить несколько элементов текста

StringSplit

Одна из наиболее популярных функций - StringSplit может разделить строку на элементы используя разделитель, например:

$sText = 'Строка1|Строка2|Строка3'
StringSplit($sText, '|')

Более полный пример

#include <Array.au3>
; Пример формирования строки с разметкой
$sText = ''
$div = '|'
For $i = 1 To 5
    $sText &= 'Строка' & $i & $div
Next
$sText = StringTrimRight($sText, 1)

; Деление строки на элементы в массив
$aText = StringSplit($sText, $div)
_ArrayDisplay($aText)

Основное условие для нормальной работы с данными в том, что каждый элемент данных не должен содержать в себе символ разделителя.

Усложним пример, используя поля внутри элементов:

#include <Array.au3>
; Пример формирования строки с разметкой
$sText = ''
$div1 = '|'
$div2 = '^'
For $i = 1 To 5
    For $j = 1 To 3
        $sText &= 'Текст' & $i & $j & $div2
    Next
    $sText = StringTrimRight($sText, 1)
    $sText &= $div1
Next
$sText = StringTrimRight($sText, 1)

; Деление строки на элементы в массив
$aText = StringSplit($sText, $div1)
_ArrayDisplay($aText)
$aText2 = StringSplit($aText[1], $div2)
_ArrayDisplay($aText2)

В этом примере уже два символа являются специальными символами разметки и не должны быть в элементах данных.

Если не планируется хранить данные в файле, то в качестве символа разделителя может использоваться один из управляющих символов (1-31), кроме Null он же Chr(0). Последний используется как конец текстовой строки и может создавать проблему для строковых функций.

$div = Chr(1) ; Управляющий символ как разделитель

Если требуется сохранить размеченные данные в файл, то лучше по возможности использовать графические (отображаемые) символы в качестве разделителей. При этом файл декодируется как текстовый, а не бинарный и его можно обработать в текстовых редакторах без опасения потерять бинарные символы при сохранении. Если всё же было принято решение использовать бинарные символы в качестве разделителей при сохранении, то не используйте расширение файла TXT и подобные, которые укзывают, что файл является в текстовом формате.

Не самый лучший, но всё же допустимый вариант - использовать юникодный символ.

Выбор разделителя, используя недопустимые символы

Многие данные являются стандатизированными и это позволяет легко определить символ разделителя из набора недопустимых символов.
Например:
  • Имя файла не может содержать символы \/:*?"<>|, а путь *?"<>|, хотя некоторые символы могут оказаться в UNC путях. Лучший вариант перенос строки или любой из вертикальных пробельных символов. Такой список даже для просмотра удобнее.
  • Имя, фамилия и отчество человека не содержит знаков препинания.
  • Для даты, времени или IP практически любой символ можно выбрать как разделитель, так как диапазон допустимых символов ограничен цифрами 0-9 и одним из внутренних разделителей ./:-
  • Контрольная сумма содержит символы: x, 0-9 и A-F, остальные могут быть разделителями.
Если используется несколько типов данных, то разделитель должен быть не допустимым для каждого типа данных. Если предполагается большой выбор разделителей, то приоритет отдаётся разделителю, который более удобен для чтения сохранённых данных, например табличный вид: строки с разделителем CRLF, в строках табуляции или символ |, и запятая как разделитель полей. Если все эти символы используются в данных, то можно воспользоваться комбинацией символов, например начало строки состоит из двух переносов и стрелки
"CRLFCRLF>"
"CRLFCRLF-->"
"CRLFCRLF-----CRLF-->"
это будет одновременно читабельный вид и маловероятная комбинация символов. А разделитель между данными в строке например:
" }-:-{ "
" ]~^~[ "
Здесь 7 символов, рисунок можно выбрать из более маловероятных символов, смотрите в таблице символов и используйте комбинацию, которая противовречит каким либо правилом написания.

В программировании на критерий вероятности чаще всего не рассчитывают, более профессиональнее использовать экранирование разделителей. Правило простое, каждый разделитель должен экранироваться, если он используется как текстовый символ, например \^, при этом сам экранирующий символ тоже экранируется \\. Принцип интерпретации достаточно прост: каждая пара \\ интерпретируется как одиночный символ \. Чётная последовательность \\\\\\ расценивается как \\\, нечетная \\\\\ расценивается как \\ и последний \ экранирует справа лежащий символ. Если справа лежащий символ не требует экранирования, то символ экранирования \ игнорируется, потому что он должен был быть либо двойной \\, либо его вообще не должно было быть. Интерпретация, повторю, достаточно проста. Единственный недостаток, нельзя воспользоваться вышеописанными функциями StringSplit или StringRegExp. Итак мы плавно переходим к более совершенному инструменту с использованием базы данных, в котором движок обработки избавлен от этого недостатка.


База данных

База данных используется если вы хотите обрабатывать очень большой объём информации с множеством элементов и каждый элемент может содержать любые символы, включая бинарные и юникод. Дистрибутив программы увеличится на размер библиотеки SQLite3.dll, примерно 500 кб (для x86); обработка базы требует знания функций AutoIt3 и команд SQL. Движок базы данных более оптимизированно выполняет запросы.
Категория: Скрипты для WindowsXP | Добавил: AZJIO (14.06.2013)
Просмотров: 2449 | Рейтинг: 5.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Вход
Друзья сайта
  • Справки AZJIO
  • USBTOR
  • PureBasic (Ru)
  • PureBasic (En)
  • AutoIT3 - Ru.Board
  • autoit-script.ru
  • autoitscript.com
  • WinPE - Ru.Board
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    ЮMoney

    Мой кошелёк

    ЮMoney: 4100117604217624


    AZJIO © 2024