Str2 что означает
Перейти к содержимому

Str2 что означает

  • автор:

Str2 что означает

Для соединения строк можно использовать операцию сложения («+»):

String str1 = "Java"; String str2 = "Hello"; String str3 = str1 + " " + str2; System.out.println(str3); // Hello Java

При этом если в операции сложения строк используется нестроковый объект, например, число, то этот объект преобразуется к строке:

String str3 = "Год " + 2015;

Фактически же при сложении строк с нестроковыми объектами будет вызываться метод valueOf() класса String. Данный метод имеет множество перегрузок и преобразует практически все типы данных к строке. Для преобразования объектов различных классов метод valueOf вызывает метод toString() этих классов.

Другой способ объединения строк представляет метод concat() :

String str1 = "Java"; String str2 = "Hello"; str2 = str2.concat(str1); // HelloJava

Метод concat() принимает строку, с которой надо объединить вызывающую строку, и возвращает соединенную строку.

Еще один метод объединения — метод join() позволяет объединить строки с учетом разделителя. Например, выше две строки сливались в одно слово «HelloJava», но в идеале мы бы хотели, чтобы две подстроки были разделены пробелом. И для этого используем метод join() :

String str1 = "Java"; String str2 = "Hello"; String str3 = String.join(" ", str2, str1); // Hello Java

Метод join является статическим. Первым параметром идет разделитель, которым будут разделяться подстроки в общей строке, а все последующие параметры передают через запятую произвольный набор объединяемых подстрок — в данном случае две строки, хотя их может быть и больше

Извлечение символов и подстрок

Для извлечения символов по индексу в классе String определен метод char charAt(int index) . Он принимает индекс, по которому надо получить символов, и возвращает извлеченный символ:

String str = "Java"; char c = str.charAt(2); System.out.println(c); // v

Как и в массивах индексация начинается с нуля.

Если надо извлечь сразу группу символов или подстроку, то можно использовать метод getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) . Он принимает следующие параметры:

  • srcBegin : индекс в строке, с которого начинается извлечение символов
  • srcEnd : индекс в строке, до которого идет извлечение символов
  • dst : массив символов, в который будут извлекаться символы
  • dstBegin : индекс в массиве dst, с которого надо добавлять извлеченные из строки символы
String str = "Hello world!"; int start = 6; int end = 11; char[] dst=new char[end - start]; str.getChars(start, end, dst, 0); System.out.println(dst); // world

Сравнение строк

Для сравнения строк используются методы equals() (с учетом регистра) и equalsIgnoreCase() (без учета регистра). Оба метода в качестве параметра принимают строку, с которой надо сравнить:

String str1 = "Hello"; String str2 = "hello"; System.out.println(str1.equals(str2)); // false System.out.println(str1.equalsIgnoreCase(str2)); // true

В отличие от сравнения числовых и других данных примитивных типов для строк не применяется знак равенства ==. Вместо него надо использовать метод equals() .

Еще один специальный метод regionMatches() сравнивает отдельные подстроки в рамках двух строк. Он имеет следующие формы:

boolean regionMatches(int toffset, String other, int oofset, int len) boolean regionMatches(boolean ignoreCase, int toffset, String other, int oofset, int len)

Метод принимает следующие параметры:

  • ignoreCase : надо ли игнорировать регистр символов при сравнении. Если значение true , регистр игнорируется
  • toffset : начальный индекс в вызывающей строке, с которого начнется сравнение
  • other : строка, с которой сравнивается вызывающая
  • oofset : начальный индекс в сравниваемой строке, с которого начнется сравнение
  • len : количество сравниваемых символов в обеих строках
String str1 = "Hello world"; String str2 = "I work"; boolean result = str1.regionMatches(6, str2, 2, 3); System.out.println(result); // true

В данном случае метод сравнивает 3 символа с 6-го индекса первой строки («wor») и 3 символа со 2-го индекса второй строки («wor»). Так как эти подстроки одинаковы, то возвращается true .

И еще одна пара методов int compareTo(String str) и int compareToIgnoreCase(String str) также позволяют сравнить две строки, но при этом они также позволяют узнать больше ли одна строка, чем другая или нет. Если возвращаемое значение больше 0, то первая строка больше второй, если меньше нуля, то, наоборот, вторая больше первой. Если строки равны, то возвращается 0.

Для определения больше или меньше одна строка, чем другая, используется лексикографический порядок. То есть, например, строка «A» меньше, чем строка «B», так как символ ‘A’ в алфавите стоит перед символом ‘B’. Если первые символы строк равны, то в расчет берутся следующие символы. Например:

String str1 = "hello"; String str2 = "world"; String str3 = "hell"; System.out.println(str1.compareTo(str2)); // -15 - str1 меньше чем strt2 System.out.println(str1.compareTo(str3)); // 1 - str1 больше чем str3

Поиск в строке

Метод indexOf() находит индекс первого вхождения подстроки в строку, а метод lastIndexOf() — индекс последнего вхождения. Если подстрока не будет найдена, то оба метода возвращают -1:

String str = "Hello world"; int index1 = str.indexOf('l'); // 2 int index2 = str.indexOf("wo"); //6 int index3 = str.lastIndexOf('l'); //9

Метод startsWith() позволяют определить начинается ли строка с определенной подстроки, а метод endsWith() позволяет определить заканчивается строка на определенную подстроку:

String str = "myfile.exe"; boolean start = str.startsWith("my"); //true boolean end = str.endsWith("exe"); //true

Замена в строке

Метод replace() позволяет заменить в строке одну последовательность символов на другую:

String str = "Hello world"; String replStr1 = str.replace('l', 'd'); // Heddo wordd String replStr2 = str.replace("Hello", "Bye"); // Bye world

Обрезка строки

Метод trim() позволяет удалить начальные и конечные пробелы:

String str = " hello world "; str = str.trim(); // hello world

Метод substring() возвращает подстроку, начиная с определенного индекса до конца или до определенного индекса:

String str = "Hello world"; String substr1 = str.substring(6); // world String substr2 = str.substring(3,5); //lo

Изменение регистра

Метод toLowerCase() переводит все символы строки в нижний регистр, а метод toUpperCase() — в верхний:

String str = "Hello World"; System.out.println(str.toLowerCase()); // hello world System.out.println(str.toUpperCase()); // HELLO WORLD

Split

Метод split() позволяет разбить строку на подстроки по определенному разделителю. Разделитель — какой-нибудь символ или набор символов передается в качестве параметра в метод. Например, разобьем текст на отдельные слова:

String text = «FIFA will never regret it»; String[] words = text.split(» «); for(String word : words)

В данном случае строка будет разделяться по пробелу. Консольный вывод:

FIFA will never regret it

Строки в Java, методы класса String

Для работы со строками в Java существует класс String. И для объявления новой строки можно использовать один из способов:

String str1 = "Java"; String str2 = new String(); // пустая строка String str3 = new String(new char[] {'h', 'e', 'l', 'l', 'o'}); String str4 = new String(new char[]{'w', 'e', 'l', 'c', 'o', 'm', 'e'}, 3, 4);

В последнем варианте 3 – это начальный индекс (индексы считаются с нуля), а 4 – это кол-во символов. То есть, строка str4 содержит строку «come».

Важной особенностью строк в Java является их неизменяемость. Это значит, что в строке нельзя попросту изменить какой-либо символ и получить другую строку. Все строки создаются и существуют в неизменном виде, пока не будут уничтожены (как правило, автоматически сборщиком мусора). А переменные str1, str2, str3 и str4 следует воспринимать лишь как ссылки на эти строки. То есть, в любой момент в программе можно записать такую конструкцию:

str1 = str3;

что означает изменение ссылки str1 на строку «hello», на которую указывает ссылка str3. Соответственно, если на первую строку «Java» не будет указывать никакая ссылка, то она автоматически уничтожается.

Разберем работу часто используемых методов класса String. Первый метод, как написано, возвращает длину строки. Например, если нам дана вот такая строка

String str1 = "Java";

то метод length() вернет значение 4

System.out.println(str1.length()); // 4

Далее, если к строке str2

String str2 = "Hello World!";

применить метод toCharArray():

char[] helloArray = str1.toCharArray();

то получим массив символов с содержимым этой строки. Следующий пример. У нас есть пустая строка

тогда мы можем определить это, например, так:

if(s.length() == 0) System.out.println("String is empty");
if(s isEmpty()) System.out.println("String is empty");

Но, если строка задана вот так:

String s = null;

то это означает, что ссылка s не указывает ни на какой класс String и, соответственно, мы не можем вызывать методы этого класса. В этом случае проверку следует делать так:

if(s != null && s.length() == 0) System.out.println("String is empty");

мы здесь сначала проверяем: указывает ли ссылка s на объект класса и если это так, то только потом будет идти обращение к методу length().

Объединение строк

Для соединения строк можно использовать операцию сложения («+»):

String str1 = "Java"; String str2 = "Hello"; String str3 = str1 + " " + str2; System.out.println(str3); // Hello Java

При этом если в операции сложения строк используется не строковый объект, например, число, то этот объект преобразуется к строке:

String str4 = "Год " + 2015;

Еще один метод объединения — метод join() позволяет объединить строки с учетом разделителя. Например, две строки

String str1 = "Java"; String str2 = "Hello";

будут сливаться в одно слово «HelloJava», если их объединить с помощью оператора +:

String str3 = str1 + str2;

но если мы хотим, чтобы две подстроки при соединении были разделены пробелом, то можно воспользоваться методом join() следующим образом:

String str3 = String.join(" ", str2, str1); // Hello Java

В общем случае вместо пробела здесь можно ставить любой разделитель в виде строки.

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

Извлечение символов и подстрок

Для извлечения символов по индексу в классе String определен метод

char charAt(int index)

Он принимает индекс, по которому надо получить символов, и возвращает извлеченный символ:

String str = "Java"; char c = str.charAt(2); System.out.println(c); // v

(здесь как и в массивах первый индекс равен 0).

Если надо извлечь сразу группу символов или подстроку, то можно использовать метод

getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)

  • srcBegin: индекс строки, с которого начинается извлечение символов;
  • srcEnd: индекс строки, до которого идет извлечение символов;
  • dst: массив символов, в который будут извлекаться символы;
  • dstBegin: индекс массива dst, с которого надо добавлять извлеченные из строки символы.
String str = "Hello world!"; int start = 6; int end = 11; char[] dst=new char[end - start]; str.getChars(start, end, dst, 0); System.out.println(dst); // world

Сравнение строк

Для простого сравнения строк используются методы equals() (с учетом регистра) и equalsIgnoreCase() (без учета регистра). Оба метода в качестве параметра принимают строку, с которой сравниваются:

String str1 = "Hello"; String str2 = "hello"; System.out.println(str1.equals(str2)); // false System.out.println(str1.equalsIgnoreCase(str2)); // true

Обратите внимание, что в отличие сравнения числовых и других данных примитивных типов для сравнения строк не рекомендуется использовать оператор ==. То есть, записывать вот такое сравнение лучше не использовать:

if(str1 == str2) System.out.println("Сроки равны");

(хотя, оно тоже будет работать). Вместо этого следует использовать метод equals() класса String. Другая пара методов: int compareTo(String str) и int compareToIgnoreCase(String str) также сравнивают строки между собой, но в отличие от equals() они еще позволяют узнать больше ли одна строка другой или нет. Если возвращаемое значение этих методов больше 0, то первая строка больше второй, если меньше нуля, то, наоборот, вторая больше первой. Если строки равны, то возвращается 0. Для определения больше или меньше одна строка, чем другая, используется лексикографический порядок. То есть, например, строка «A» меньше, чем строка «B», так как символ ‘A’ в алфавите стоит перед символом ‘B’. Если первые символы строк равны, то в расчет берутся следующие символы. Например:

String str1 = "hello"; String str2 = "world"; String str3 = "hell"; System.out.println(str1.compareTo(str2)); // -15 - str1 меньше чем str2 System.out.println(str1.compareTo(str3)); // 1 - str1 больше чем str3 System.out.println(str1.compareTo(str1)); // 0 - str1 равна str1
  • ignoreCase: надо ли игнорировать регистр символов при сравнении (если значение true, то регистр игнорируется);
  • toffset: начальный индекс в вызывающей строке, с которого начнется сравнение;
  • other: строка, с которой сравнивается вызывающая;
  • oofset: начальный индекс в сравниваемой строке, с которого начнется сравнение;
  • len: количество сравниваемых символов в обеих строках.
String str1 = "Hello world"; String str2 = "I work"; boolean result = str1.regionMatches(6, str2, 2, 3); System.out.println(result); // true

Поиск в строке

Метод indexOf() находит индекс первого вхождения подстроки в строку, а метод lastIndexOf() — индекс последнего вхождения. Если подстрока не будет найдена, то оба метода возвращают -1:

String str = "Hello world"; int index1 = str.indexOf('l'); // 2 int index2 = str.indexOf("wo"); //6 int index3 = str.lastIndexOf('l'); //9 System.out.println(index1+" "+index2+" "+index3);

Метод startsWith() позволяют определить начинается ли строка с определенной подстроки, а метод endsWith() позволяет определить заканчивается строка на определенную подстроку:

String str = "myfile.exe"; boolean start = str.startsWith("my"); //true boolean end = str.endsWith("exe"); //true System.out.println(start+" "+end);

Замена в строке

Метод replace() позволяет заменить в строке одну последовательность символов на другую:

String str = "Hello world"; String replStr1 = str.replace('l', 'd'); // Heddo wordd String replStr2 = str.replace("Hello", "Bye"); // Bye world System.out.println(replStr1); System.out.println(replStr2);

Обрезка строк

Метод trim() позволяет удалить начальные и конечные пробелы:

String str = " hello world "; str = str.trim(); // hello world System.out.println(str);

Метод substring() возвращает подстроку, начиная с определенного индекса до конца или до определенного индекса:

String str = "Hello world"; String substr1 = str.substring(6); // world String substr2 = str.substring(3,5); //lo System.out.println(substr1); System.out.println(substr2);

Изменение регистра

Метод toLowerCase() переводит все символы строки в нижний регистр, а метод toUpperCase() — в верхний:

String str = "Hello World"; System.out.println(str.toLowerCase()); // hello world System.out.println(str.toUpperCase()); // HELLO WORLD

Разбиение строки на подстроки

Метод split() позволяет разбить строку на подстроки по определенному разделителю. Разделитель – это какой-нибудь символ или набор символов (передается в качестве параметра). Например, разобьем текст на отдельные слова (учитывая, что слова разделены пробелом):

String text = "Я люблю язык Java!"; String[] words = text.split(" "); for(String word : words) System.out.println(word);

Для представления текстовой информации в языке С+ + используются символы (константы), символьные переменные и строки (строковые константы) для которых в языке С+ + не введено отдельного типа в отличии от некоторых других языков программирования.

Строки в языке С+ + — это последовательность символов, заключенная в кавычки. Строка — это массив символов, т.е. она всегда имеет тип char.

char str [0] = «среда»;

char str [10] =

Особенность строк:

  1. Транслятор, размещая строку в памяти, автоматически добавляет в нее символ конец строки ‘\0’, т.е. нулевой байт. Количество элементов в таком массиве на единицу больше, чем в изображении соответствующей строковой константы. для строки «А» длина = 2 байта для символа ‘А’ длина = 1 байт
  2. При инициализации массива отдельными символами обязательно в конце массива указывается символ ‘\0’;
  3. Инициализация символьного массива пробелами char str [80] = ;

Ввод и вывод текстовой информации

Процедуры ввода — вывода символа

int ch;

ch = getch ( ); — ввод кода нажатой клавиши без отображения соответствующего символа на экране

ch = getche ( ); — ввод нажатой клавиши с соответствующего символа на экране

ch = getcrar ( ); — ввод кода нажатой клавиши вслед за нажатием клавиши enter

Вывод символа : putchar (C1)

Процедуры ввода — вывода строки: gets (str) , puts (str)

char str [80]; // объявление строки

gets (str); // ввод строки

puts (str); // вывод строки

Стандартные программные решения
  1. Получить символ десятичной цифры из значения переменной, лежащей в диапазоне 0…9int n;char c;c = n + ‘0′;
  2. Получить значение целой переменной из символа десятичной цифрыif ( c >= ‘0’ && c n = c — ‘0’;

Строки

Для работы со строками необходимо использовать заголовочный файл string.h

Функции для работы со строками

1.Определение длины строки strlen ( )

char str [ ] = «0123456789»

int l = strlen (str);

Завершающий нулевой символ в длину строки входит.

2.Копирование строк strcpy ( ), strncpy ( )

char strcpy (str1, str2)

Выполняется побайтное копирование символов из строки str2 в строку str1. Копирование прекращается только в случае достижения символа ‘\0’ (нуль- терминатор). Перед копированием необходимо проверить выполнение условия, что длина str2 меньше или равна длине str1. В противном случае возможно возникновение ошибок, связанных с наложением данных.

strcpy (str, «Проверка копирования»);

Копирование через указатели и копирование не всей строки
char str1[20] = «Проверка копирования»;
char str2[20];
char *ptr = str1;
ptr + = 9, // ptr указывает на слово «копирование»;
strcpy (str2, ptr);
cout
Функция strncpy ( ) копирует n символов из строки S2 в строку S1.

Пример: char str [40]

strncpy (str, “Borland C+ +”,7)

puts(str); // Borland

3.Конкатенация (или присоединение) строк strcat ( )

strncat ( ) – присоединение n символов из другой строки

strcat (str1, str2)

Строка str2 присоединяется к строке str1. Величина str1 должна быть достаточной для хранения объединенной строки.

Пример: char str [80];

strcpy (str, «Для продолжения»);

strcat (str, «Нажмите клавишу»);

Синтаксис: strncat (str1, str2, n)

Пример: char str [80]; = “Языки программирования”;

char str [30] = “ C+ +, Паскаль, Бейсик”;

strncat (str1, str2, 13);

puts(str1); // Языки программирования: С+ +, Паскаль

4.Сравнение строк strcmp ( )

Функция имеет тип int, так как данная функция выполняет сравнение двух строк str1 и str2, различая прописные и строчные буквы, в результате сравнения возвращает одно из следующих значений:

Если результат функции < 0, то str1 < str2.

Если результат функции = 0, то строки эквивалентны

Если результат функции > 0, то str1 > str2

Пример: str1 [ ] = «Borland»

str2 [ ] = «BORLAND»

int i;

i = strcmp (str1, str2); // i = 32

Распишем АСКИ-коды заданных строки и сравним их

Borland 66 111 114 108 97 110 100

BORLAND 66 79 82 76 65 78 68

Разница между кодами символов строк = 32, результат больше 0, значит строка str1> str2

Функция strncmp( ) проводит сравнение определенного числа первых символов двух строк. Регистр символов при этом учитывается.

char str1 [ ] = «Ошибка открытия базы»;

char str2 [ ] = «Ошибка открытия базы»;

i =strncmp (str1, str2, 12)

строки отличаются одним символом

i > 0; str1 > str2;

Функция stricmp() сравнивает строки, не различая регистра символов. Возвращается одно из следующих значений: i > 0, i = 0, i < 0;

char str1 [ ] = «Moon»; char str2 [ ] = «MOON»;

int i = strincmp (str1, str2);

i=0, строки эквивалентны

5.Преобразование строк: strlwr ( ), strupr ( ), strrev ( )

strlwr ()- преобразует прописные буквы в строчные

Пример: char str [ ] = «HELLO»;

strupr ()- преобразует строчные буквы в прописные

strrev ()- реверсирование строки, т.е. изменяет порядок следования символов на обратный.

Пример: char str [ ] = “сон”;

strrev (str); // нос

6.Поиск символов

strchr() — производит поиск символа в строке, указывает место первого вхождения символа в строку. Если символ не найден, функция возвращает NULL.

Пример: char str [ ] = «абвгдеёжзийк»;

pstr = strchr (str, ‘ж’);

В результате работы программы указатель pstr будет указывать на подстроку «жзийк» в строке str.

strrchr() — возвращает указатель на последний, совпадающий с заданным символом, символ в строке. Если символ не найден, возвращается значение NULL.

Пример: char str [ ] = «абвгджизийк»;

pstr = strrchr (str, ‘и’); // ийк

strspn() — проводит сравнение символов одной строки с символами другой и возвращает позицию (начиная с нуля), в которой строки перестают совпадать.

Функция проверяет каждый символ строки str на соответствие каждому из символов строки group. В результате работы, функция возвращает число совпавших символов.

Пример: char str [ ] = «Загрузка параметров БД»;

char substr [ ] = «Загрузка параметррррр»;

int i = strspn (str, substr);

символы совпадают до 17 позиции.

Приведенная функция различает регистр символов.

strcspn ( )— сопоставляет символы строки str1 и str2 и возвращает длину строки str1, не входящей в str2. С помощью этой функции можно определить, в какой позиции происходит перекрещение двух символьных массивов.

Пример: char str [ ] = «abcdefghijk»;

int k;

k = strcspn (str, «elf»);

k = 4 — в этой позиции строки имеют первый общий элемент.

strpbrk() — отыскивает место вхождения в строку str1 любого из символов строки str2. Если символы найдены, возвращается место первого вхождения любого символа из str2 в строку str1. В противном случае функция возвращает NULL.

Пример: char str1 [ ] = «abcdefghjk»;

char str2 [ ] = «esb»;

char *ptr;

ptr = strpbrk (str1, str2);

bcdefghjk, т.к. символ ‘b’ из строки str2 встречается в строке str1 раньше других.

7.Поиск подстрок

strstr ()- данная функция осуществляет сканирование строки str1 и находит место первого вхождения подстроки str2 в строку str1. В случае успешного поиска функция strstr() возвращает указатель на первый символ строки str, начиная с которого следует точное совпадение части str1 обязательно со всей лексемой str2. Если строка str2 не найдена в str1, возвращается NULL.

Пример: c har str1 [80] = «Производится поиск элемента»;

char str2 [80] = «Поиск»;

char *ptr;

ptr = strstr(str1, str2);

strtok() — выполняет поиск в строке str подстроки, обрамленной с обеих сторон любым символом — разделителем из строки str1.

strtok (str, str1);

В случае успешного поиска данная функция обрезает строку str, помещая символ ‘\0’ в месте, где заканчивается найденная лексема. При повторном поиске лексемы в указанной строке str первым параметром следует указывать NULL.

Пример со строками(Решение задачи можно посмотреть, скачав файл «Задача-18»):

Подсчитать сумму цифр в строке.

Str2 что означает

Есть несколько вопросов по работе строковых функций:
1. Функция FIND(Str1, Str2) должна бы, по идее, возвращать значение 0, если Str2 не найдена в Str1. Не возвращает, или, можно сказать, возвращает неправильно. А если Str2 = ‘.’ возвращает 1 всегда, где бы эта точка не находилась. Если искать ‘,’ и запятая есть в Str1, возвращается правильный номер в строке. Но если запятую из строки убрать, то возвращается номер позиции где запятая была. Ноль возвращать не хочет.

2. Если на строковый вход скрипта ST вместо непустой строки подать пустую строку, то скрипт не обрабатывает её. Например, можно написать внутри скрипта функцию LEN(in_string), надеясь получить длину 0, но ничего подобного не произойдёт.

Опрос объектов периодический. Почему пустые строки не обрабатываются? Замеченные особенности действительно имеют место быть или это я неправильно использую строковые функции?

SCADAMaster
29.05.2019, 09:19
У нас все корректно. Попробуйте проверить на текущей Beta версии.
29.05.2019, 10:08

У меня стояла версия 3.9.0.2484. Скачал с сайта версию 3.10.0.8093 3.10(RT32ReleaseMax)_19_02_01_23_46. В ней эти функции работают корректно. Спасибо за подсказку. А это и есть Beta версия? Или Beta лежит где-то в другом месте?

29.05.2019, 10:44

Поиск подстроки всегда возвращает первое вхождение, при отсутствии указания позиции с какой начинать поиск.
Если речь про точки, запятые и повторяющиеся данные.

Мне так кажется.
И вы собственно 1 получаете, что что-то найдено, нет ?

з.ы. не знаток ST но обычно так, если реализация самого ST на языке другого уровня.
Должно вернуть bool = true если нашел, и еще в некую переменную указать номер позиции первого вхождения.

SCADAMaster
29.05.2019, 11:00

У меня стояла версия 3.9.0.2484. Скачал с сайта версию 3.10.0.8093 3.10(RT32ReleaseMax)_19_02_01_23_46. В ней эти функции работают корректно. Спасибо за подсказку. А это и есть Beta версия? Или Beta лежит где-то в другом месте?
Beta лежит там же.
Но если работает эта, то используйте ее

29.05.2019, 11:48

[QUOTE=melky;306530]Поиск подстроки всегда возвращает первое вхождение, при отсутствии указания позиции с какой начинать поиск.
Если речь про точки, запятые и повторяющиеся данные.

Мне так кажется.
И вы собственно 1 получаете, что что-то найдено, нет ?

В функции FIND на языке ST два аргумента: FIND(строка в которой ищем, строка которую надо найти). Негде ей указать с какой позиции начать поиск. В версии Скады 3.9 FIND(строка, ‘.’) всегда возвращала 1, независимо от того, где в строке точка и есть ли она вообще. В версии 3.10 функция работает правильно. А если что-то не найдено в языке ST должно возвращаться 0.

29.05.2019, 11:54

Хм, че за странная функция на ST, а если у меня в строке 2 одинаковые записи, а мне нужна определенная ? или обработать одну, потом обработать следующую ?

29.05.2019, 13:18

Ага. Вот такая странная функция. Из описания: «FIND(STR1, STR2) означает: найти позицию в строке STR1, где впервые встречается подстрока STR2.» А дальше, если надо найти повторения, именно как Вы говорите — отрезать кусок строки с найденным включением, повторить поиск в оставшемся обрезке строки, и т. д. В принципе, элементарных строковых функций ST вполне хватает для несложной обработки строк. А для особо причудливых извращений есть C#.

29.05.2019, 13:23

Я так понимаю, если ничего не нашла, FIND=0, если что-то нашла то FIND = число, начало позиции первого вхождения?

может у вас там точка всегда на первой позиции ? 🙂

Powered by vBulletin® Version 4.2.3 Copyright © 2023 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot

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

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