Перейти к содержимому

Какие из переменных соответствуют типу строка

  • автор:

строковый тип данных

Существует два типа строк: строки переменной длины и фиксированной длины.

  • Строка переменной длины может содержать приблизительно до 2 миллиардов (2^31) знаков.
  • Строка фиксированной длины может содержать от 1 до 64 K (2^16) символов.

Примечание. Строка фиксированной длины Public не может использоваться в модуле класса.

Коды знаков String находятся в диапазоне 0–255. Первые 128 символов (0–127) набора знаков соответствуют буквам и символам на стандартной клавиатуре США. Эти первые 128 знаков совпадают со знаками, которые определяются набором знаков ASCII. Следующие 128 знаков (128–255) представляют специальные знаки, такие как буквы международных алфавитов, диакритические знаки, символы валюты и дроби.

Символ объявления типа для string — это знак доллара ($).

Двойная кавычка может быть внедрена в строковый литерал одним из двух способов:

    Используйте две двойные кавычки:

 Dim s As String s = "This string literal has an embedded "" in it." 
 Dim s As String s = "This string literal has an embedded " & Chr(34) & " in it." 

Строка фиксированной длины включает в себя пробелы или усечение по мере необходимости:

 Dim s As String * 3 Debug.Print Len(s) & " characters [" & s & "]" 'Prints 3 characters [ ] s = "a" Debug.Print Len(s) & " characters [" & s & "]" 'Prints 3 characters [a ] s = "abcdefghijklmnopqrstuvwxyz" Debug.Print Len(s) & " characters [" & s & "]" 'Prints 3 characters [abc] 

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Обратная связь

Были ли сведения на этой странице полезными?

Обратная связь

Отправить и просмотреть отзыв по

Тип данных String (Visual Basic)

Содержит последовательности 16-разрядных (2-байтовых) кодовых точек без знака в диапазоне от 0 до 65535. Каждая кодовая точка или код символа представляет один символ Юникода. Строка может содержать от 0 до примерно двух миллиардов (2 ^ 31) символов Юникода.

Комментарии

String Используйте тип данных для хранения нескольких символов без дополнительных Char() затрат на управление массивом , массив элементов Char .

Значение String по умолчанию — Nothing (пустая ссылка). Обратите внимание, что это не то же самое, что пустая строка (значение «» ).

Символы Юникода

Первые 128 кодовых точек (0–127) Юникода соответствуют буквам и символам на стандартной клавиатуре США. Эти первые 128 кодовых точек совпадают с теми, которые определяет набор символов ASCII. Вторые 128 кодовых точек (128–255) представляют специальные символы, такие как латинские буквы, диакритические знаки, символы валют и дроби. Юникод использует оставшиеся кодовые точки (256–65535) для широкого спектра символов. Сюда входят текстовые символы, диакритические знаки, математические и технические символы.

Для определения ее классификации в Юникоде можно использовать такие методы, как IsDigit и IsPunctuation для отдельного символа в переменной String .

Требования к формату

Литерал String необходимо заключить в кавычки ( » » ). Если в качестве одного из символов в строке необходимо включить кавычки, используйте две смежные кавычки ( «» ). Это показано в следующем примере.

Dim j As String = "Joe said ""Hello"" to me." Dim h As String = "Hello" ' The following messages all display the same thing: ' "Joe said "Hello" to me." MsgBox(j) MsgBox("Joe said " & """" & h & """" & " to me.") MsgBox("Joe said """ & h & """ to me.") 

Обратите внимание, что смежные кавычки, представляющие кавычки в строке, не зависят от кавычек, которые начинаются и заканчиваются String литералом.

Операции со строками

После назначения строки переменной String она становится неизменяемой, что означает, что вы не сможете изменить ее длину или содержимое. При любом изменении строки Visual Basic создает новую строку и отменяет предыдущую. Затем String переменная указывает на новую строку.

Управлять содержимым переменной String можно с помощью различных строковых функций. В следующем примере показана Left функция

Dim S As String = "Database" ' The following statement sets S to a new string containing "Data". S = Microsoft.VisualBasic.Left(S, 4) 

Строка, созданная другим компонентом, может быть заполнена начальными или конечными пробелами. Если вы получили такую строку, можно использовать Trimфункции , LTrimи RTrim для удаления этих пробелов.

Дополнительные сведения о манипуляциях со строками см. в разделе Строки.

Советы по программированию

  • Отрицательные числа. Помните, что символы, хранящиеся в , String не имеют знака и не могут представлять отрицательные значения. В любом случае не следует использовать для String хранения числовых значений.
  • Вопросы взаимодействия. При взаимодействии с компонентами, не написанными для платформа .NET Framework, например с объектами автоматизации или COM, помните, что в других средах строковые символы имеют другую ширину данных (8 бит). Если вы передаете строковый аргумент из 8-разрядных символов в такой компонент, объявите его как Byte() массив Byte элементов, а не String в новом коде Visual Basic.
  • Символы типов. Добавление символа $ типа идентификатора к любому идентификатору приводит его к типу String данных. String не имеет символа литерального типа. Однако компилятор рассматривает литералы, заключенные в кавычки ( » » ), как String .
  • Тип Framework. Соответствующим типом в платформа .NET Framework является System.String класс .

См. также раздел

  • System.String
  • Типы данных
  • Тип данных Char
  • Type Conversion Functions
  • Сводка по преобразованию
  • Практическое руководство. Вызов функции Windows, принимающей значение беззнакового типа
  • Эффективное использование типов данных

Совместная работа с нами на GitHub

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

Какие из переменных соответствуют типу строка


Next: Преобразование данных Up: Соответствие типов данных и Previous: Соответствие типов данных и &nbsp Contents

  1. Данные выталкиваются из буфера процесса-отправителя и части сообщения объединяются
  2. Сообщение передается от отправителя к получателю
  3. Данные выделяются из получаемого сообщения и помещаются в буфер получателя

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

Чтобы определить соответствие типов более точно, приходится иметь дело с двумя проблемами: с проблемой сравнения типов исходного языка с типами, указанными в коммуникационных операциях, и с проблемой сравнения типов отправителя и получателя.

Типы отправителя и получателя (фаза два) соответствуют друг другу, если обе операции используют одинаковые названия. Это означает, что MPI_INTEGER соответствует MPI_INTEGER, MPI_REAL соответствует MPI_REAL , и так далее. Имеется одно исключение из этого правила, которое обсуждается в разделе 3.13, тип MPI_PACKED может соответствовать любому другому типу.

Тип переменной в хост (главной) программе соответствует типу, указанному в операции обмена, если название типа данных, используемое этой операцией, соответствует базисному типу переменной хост программы. Например, элемент с названием типа MPI_INTEGER соответствует в языке ФОРТРАН переменной типа INTEGER . Таблица, описывающая соответствие для языков ФОРТРАН и Си, представлена в разделе 3.2.2. Имеется два исключения из этого последнего правила: элемент с названием типа MPI_BYTE или MPI_PACKED может соответствовать любому байту памяти (на байт-адресуемой машине), без учета типа переменной, которая содержит этот байт. Тип MPI_PACKED используется для передачи данных, которые были явно упакованы, или для получения данных, которые будут явно распакованы (см. раздел 3.13). Тип MPI_BYTE позволяет передавать неизменным двоичное значение байта из памяти.

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

  • Коммуникация типизированных значений (то есть с типами данных, отличных от MPI_BYTE ), где типы данных соответствующих элементов в программе передачи, в вызове операции передачи, в вызове операции приема и в программе приема все должны соответствовать друг другу.
  • Коммуникация нетипизированных значений (то есть типа MPI_BYTE ), где как отправитель, так и получатель используют тип MPI_BYTE . В этом случае не имеется никаких требований по типам соответствующих элементов в передающей и принимающей программах, не требуется также, чтобы они были теми же самыми.
  • Коммуникация, применяющая упакованные данные, где используется MPI_PACKED .

Следующие примеры иллюстрируют первые два случая.

Пример 3.1 Отправитель и получатель указывают типы соответствия.

CALL MPI_COMM_RANK(comm, rank, ierr) IF(rank.EQ.0) THEN CALL MPI_SEND(a(1), 10, MPI_REAL, 1, tag, comm, ierr) ELSE CALL MPI_RECV(b(1), 15, MPI_REAL, 0, tag, comm, status, ierr) END IF

Этот код корректен, если a и b есть действительные массивы размера 10. (В языке ФОРТРАН может быть корректным использовать этот код даже если a или b имеют размер < 10, например, когда a(1) эквивалентно массиву с десятью действительными числами.)

Пример 3.2 Отправитель и получатель не указывают типы соответствия.

CALL MPI_COMM_RANK(comm, rank, ierr) IF(rank.EQ.0) THEN CALL MPI_SEND(a(1), 10, MPI_REAL, 1, tag, comm, ierr) ELSE CALL MPI_RECV(b(1), 40, MPI_BYTE, 0, tag, comm, status, ierr) END IF

Этот код неверен, поскольку отправитель и получатель описывают различные типы данных.

Пример 3.3 Отправитель и получатель описывают передачу нетипизированных значений.

CALL MPI_COMM_RANK(comm, rank, ierr) IF(rank.EQ.0) THEN CALL MPI_SEND(a(1), 40, MPI_BYTE, 1, tag, comm, ierr) ELSE CALL MPI_RECV(b(1), 60, MPI_BYTE, 0, tag, comm, status, ierr) END IF

Этот код правилен безотносительно к типу и размеру а и b ( кроме случая, когда эти результаты выходят за границы памяти).

Совет пользователям: Если буфер типа MPI_BYTE передается в качестве аргумента операции MPI_SEND , то MPI будет посылать данные, хранимые в buf в смежных ячейках, начиная с адреса, указанного в аргументе buf . Это может иметь неожиданный результат, когда данные размещены не так, как предполагал их видеть пользователь. Например, некоторые компиляторы языка ФОРТРАН реализуют переменные типа CHARACTER как структуру, которая содержит длину знака и указатель на реальную строку. В такой среде передача и прием переменной CHARACTER с использованием типа MPI_BYTE не будет иметь ожидаемого результата передачи знаковой строки. По этой причине пользователю рекомендуется использовать типизированные обмены, где только возможно.[]

Тип MPI_CHARACTER соответствует одному знаку переменной языка ФОРТРАН с типом
CHARACTER , а не полной знаковой строке, хранимой в переменной. Переменные языка ФОРТРАН типа CHARACTER или подстроки передаются, как если бы они были массивами знаков. Это показано в примере ниже.

Пример 3.4 Передача знаков в языке ФОРТРАН

CHARACTER*10 a CHARACTER*10 b CALL MPI_COMM_RANK(comm, rank, ierr) IF(rank.EQ.0) THEN CALL MPI_SEND(a, 5, MPI_CHARACTER, 1, tag, comm, ierr) ELSE CALL MPI_RECV(b(6:10), 5, MPI_CHARACTER, 0, tag, comm, status, ierr) END IF

Последние пять знаков строки b в процессе 1 замещаются пятью первыми знаками строки процесса 0.

Объяснение: Альтернативой для MPI_CHARACTER могло бы быть соответствие знаку произвольной длины, однако это создает следующую проблему.

Знаковая переменная языка ФОРТРАН есть строка постоянной длины без специального символа конца. Не имеется зафиксированного соглашения о том, как представлять символы и как хранить их длину. Некоторые компиляторы передают аргумент знака процедуре как пару аргументов: один хранит адрес строки, другой — длину строки. Рассмотрим случай вызова обмена MPI , который передает коммуникационный буфер с типом derived datatype (производный тип данных, раздел 3.12). Если этот коммуникационный буфер содержит переменную типа MPI_CHARACTER , то информация о его длине не будет послана процедуре MPI .

Эта проблема приводит к заданию явной информации о длине знака в вызове MPI . Можно добавить параметр длины к типу MPI_CHARACTER , но это не добавляет удобства и те же возможности могут быть достигнуты определением подходящего производного типа данных.[]

Совет разработчикам: Некоторые компиляторы передают в языке ФОРТРАН аргумент типа
CHARACTER как структуру с длиной и указателем на реальную строку. В такой среде вызов MPI должен преобразовывать указатель, чтобы достичь строки.[]

Alex Otwagin 2002-12-10

Какие из переменных соответствуют типу строка

Особенности присвоения значений переменным

Вид константы или переменной (глобальная, локальная) задается оператором, с помощью которого данная переменная (константа) определяется (см. Операторы определения переменных в разделе Операторы Техно ST ). Синтаксис операторов определения переменных предполагает обязательное указание типа данных:

//определение локальной строковой

VAR myVar: STRING; END_VAR

Тип данных определяет размер выделяемой памяти. Для указания типа в Техно ST определены следующие ключевые слова (в круглых скобках указано соответствие типу данных C):

BOOL (bool) – булево значение размерностью 1 байт (true (1) или false (0));

SINT (__int8) – целое со знаком размерностью 1 байт (-128 . 127);

USINT (unsigned __int8) – целое без знака размерностью 1 байт (0 . 255);

INT (short) – целое со знаком размерностью 2 байта (-32768 . 32767);

UINT (unsigned short) – целое без знака размерностью 2 байта (0 . 65535);

DINT (long) – целое со знаком (4 байта) (-2147483648 . 2147483647);

UDINT (unsigned long) – целое без знака (4 байта) (0 . 4294967295);

TIME, DATE, TIME_OF_DAY, DATE_AND_TIME – соответствуют DINT. Значения переменных этих типов задаются аналогично соответствующим временным константам (см. Числовые константы Техно ST );

REAL (float) – вещественное число (4 байта) (максимальное значение 3.402823466e+38);

LREAL (double) – вещественное число (8 байт) (максимальное значение 1.7976931348623158e+308);

STRING (WCHAR*) – 256 символов в кодировке utf-8 (512 байт, см. также Строковые константы Техно ST );

HANDLE – специальный тип, используемый для хранения внешних данных в виде числа, имеет размерность 4 байта, не может быть использован в арифметических, логических и т.п. операциях.

Кроме указанных типов, переменной может быть присвоен структурный тип, созданный пользователем. Такая переменная является конкретным объектом указанного типа (см. Структуры Техно ST ).

При определении переменной может быть задано ее значение:

VAR i: INT:=0; END_VAR

Если при определении переменной ее значение не задано, то этой переменной по умолчанию присваивается следующее начальное значение:

числовая переменная – 0;

переменная типа BOOLFALSE;

переменная типа STRING – пустая строка;

переменная типа HANDLE – 16#00000000 (0 в формате HEX);

переменная типа TIME, DATE, TIME_OF_DAY или DATE_AND_TIME – 0.

При определении константы задание ее значения обязательно:

VAR CONSTANT myConst: INT:=13; END_VAR

В отличие от переменной, значение константы в программе изменять нельзя.

Особенности присвоения значений переменным

При присвоении значения переменной типа TYPE1 переменной типа TYPE2 нужно учитывать следующее:

присвоение корректно только в том случае, если тип TYPE2 заключает в себе все числа типа TYPE1:

VAR a: REAL := -1564.343; END_VAR

VAR b: USINT := 50; END_VAR

a = b; // корректная операция

b = a; // некорректная операция

присвоение корректно, если один из типов – BOOL, а другой – любой численный. Логическое значение TRUE соответствует единице, FALSE – нулю; нуль соответствует FALSE, любое ненулевое значение, в том числе отрицательное, соответствует TRUE:

VAR a: BOOL; END_VAR

VAR b: SINT := -50; END_VAR

a = b; // a = TRUE , корректная операция

b = a; // b = 1 , корректная операция

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *