Какой тип данных возвращает метод find
Перейти к содержимому

Какой тип данных возвращает метод find

  • автор:

Знакомство с методом find¶

Метод find используется в MongoDB для выполнения запросов. При выполнении запроса возвращается подмножество документов в коллекции, при этом документов может не быть вообще либо это может быть вся коллекция. Какие документы возвращаются, определяется первым аргументом метода, который представляет собой документ, определяющий критерии запроса.

Пустой документ запроса (т. е. <> ) соответствует всему, что есть в коллекции. Если методу find не предоставлен документ запроса, по умолчанию используется <> . Например, строка

> db.c.find() 

соответствует каждому документу в коллекции c (и возвращает эти документы в пакетном режиме).

Когда мы начинаем добавлять пары типа «ключ/значение» в документ запроса, мы начинаем ограничивать наш поиск. Для большинства типов это работает просто: числа соответствуют числам, логические значения соответствуют логическим значениям, а строки соответствуют строкам. Запросить простой тип так же просто, как указать значение, которое вы ищете. Например, чтобы найти все документы, где значение age равно 27 , можно добавить эту пару типа «ключ/значение» в документ запроса:

> db.users.find() 

Если у нас есть строка, которую мы хотим сопоставить, например ключ username и значение joe , мы используем эту пару:

> db.users.find() 

Можно объединить несколько условий, добавив больше пар типа «ключ/значение» в документ запроса, который интерпретируется как «условие1 И условие2 И… И условиеN». Например, чтобы получить всех пользователей, которым 27 лет, с именем joe , можно выполнить следующий запрос:

> db.users.find() 

Указываем, какие ключи нужно вернуть¶

Иногда вам не нужны все пары типа «ключ/значение» в возвращаемом документе. В этом случае можно передать второй аргумент методу find (или findOne ), указывая нужные вам ключи. Это уменьшает как объем передаваемых данных, так и время и память, используемые для декодирования документов на стороне клиента.

Например, если у вас есть коллекция пользователей и вас интересуют только ключи username и email , можно вернуть лишь эти ключи с помощью следующего запроса:

> db.users.find(<>, ) 

Метод Module.Find (Access)

Находит указанный текст в стандартном модуле или модуле класса.

Синтаксис

expression. Найти (Target, StartLine, StartColumn, EndLine, EndColumn, WholeWord, MatchCase, PatternSearch)

Выражение Переменная, представляющая объект Module .

Параметры

Имя Обязательный или необязательный Тип данных Описание
Target (Целевое значение) Обязательный String Текст, который требуется найти.
StartLine Обязательный Long Строка, с которой начинается поиск. При обнаружении совпадения значение аргумента StartLine устанавливается в строку, в которой найден начальный символ соответствующего текста.
StartColumn Обязательный Long Столбец, по которому начинается поиск. Каждый символ в строке находится в отдельном столбце, начиная с нуля в левой части модуля. При обнаружении совпадения значение аргумента StartColumn задается в столбец, в котором найден начальный символ соответствующего текста.
EndLine Обязательный Long Строка, по которой следует прекратить поиск. При обнаружении совпадения значение аргумента EndLine устанавливается в строку, в которой найден конечный символ соответствующего текста.
EndColumn Обязательный Long Столбец, в котором следует прекратить поиск. При обнаружении совпадения значение аргумента EndColumn устанавливается в столбец, в котором найден начальный символ соответствующего текста.
WholeWord Необязательный Логический Значение True приводит к поиску только целых слов. Значение по умолчанию — false.
MatchCase Необязательный Логический True приводит к поиску слов с регистром, соответствующим аргументу Target . Значение по умолчанию — false.
PatternSearch Необязательный Логический True приводит к поиску, в котором аргумент Target может содержать подстановочные знаки, такие как звездочка (*) или вопросительный знак (?). Значение по умолчанию — false.

Возвращаемое значение

Примечания

Метод Find выполняет поиск указанной текстовой строки в объекте Module . Если строка найдена, метод Find возвращает значение True.

Чтобы определить позицию в модуле, в котором был найден поисковый текст, передайте пустые переменные в метод Find для аргументов StartLine, StartColumn, EndLine и EndColumn . Если совпадение найдено, эти аргументы будут содержать номер строки и положение столбца, с которых начинается текст поиска (StartLine, StartColumn) и заканчивается (EndLine, EndColumn).

Например, если текст поиска найден в строке 5, начинается с столбца 10 и заканчивается в столбце 20, значения этих аргументов: StartLine = 5, StartColumn = 10, EndLine = 5, EndColumn = 20.

Пример

Следующая функция находит указанную строку в модуле и заменяет строку, содержащую ее, новой указанной строкой.

Function FindAndReplace(strModuleName As String, _ strSearchText As String, _ strNewText As String) As Boolean Dim mdl As Module Dim lngSLine As Long, lngSCol As Long Dim lngELine As Long, lngECol As Long Dim strLine As String, strNewLine As String Dim intChr As Integer, intBefore As Integer, _ intAfter As Integer Dim strLeft As String, strRight As String ' Open module. DoCmd.OpenModule strModuleName ' Return reference to Module object. Set mdl = Modules(strModuleName) ' Search for string. If mdl.Find(strSearchText, lngSLine, lngSCol, lngELine, _ lngECol) Then ' Store text of line containing string. strLine = mdl.Lines(lngSLine, Abs(lngELine - lngSLine) + 1) ' Determine length of line. intChr = Len(strLine) ' Determine number of characters preceding search text. intBefore = lngSCol - 1 ' Determine number of characters following search text. intAfter = intChr - CInt(lngECol - 1) ' Store characters to left of search text. strLeft = Left$(strLine, intBefore) ' Store characters to right of search text. strRight = Right$(strLine, intAfter) ' Construct string with replacement text. strNewLine = strLeft & strNewText & strRight ' Replace original line. mdl.ReplaceLine lngSLine, strNewLine FindAndReplace = True Else MsgBox "Text not found." FindAndReplace = False End If Exit_FindAndReplace: Exit Function Error_FindAndReplace: MsgBox Err & ": " & Err.Description FindAndReplace = False Resume Exit_FindAndReplace End Function 

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

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

Какой тип данных возвращает метод find

Рассмотрим основные методы строк, которые мы можем применить в приложениях:

  • isalpha() : возвращает True, если строка состоит только из алфавитных символов
  • islower() : возвращает True, если строка состоит только из символов в нижнем регистре
  • isupper() : возвращает True, если все символы строки в верхнем регистре
  • isdigit() : возвращает True, если все символы строки — цифры
  • isnumeric() : возвращает True, если строка представляет собой число
  • startswith(str) : возвращает True, если строка начинается с подстроки str
  • endswith(str) : возвращает True, если строка заканчивается на подстроку str
  • lower() : переводит строку в нижний регистр
  • upper() : переводит строку в вехний регистр
  • title() : начальные символы всех слов в строке переводятся в верхний регистр
  • capitalize() : переводит в верхний регистр первую букву только самого первого слова строки
  • lstrip() : удаляет начальные пробелы из строки
  • rstrip() : удаляет конечные пробелы из строки
  • strip() : удаляет начальные и конечные пробелы из строки
  • ljust(width) : если длина строки меньше параметра width, то справа от строки добавляются пробелы, чтобы дополнить значение width, а сама строка выравнивается по левому краю
  • rjust(width) : если длина строки меньше параметра width, то слева от строки добавляются пробелы, чтобы дополнить значение width, а сама строка выравнивается по правому краю
  • center(width) : если длина строки меньше параметра width, то слева и справа от строки равномерно добавляются пробелы, чтобы дополнить значение width, а сама строка выравнивается по центру
  • find(str[, start [, end]) : возвращает индекс подстроки в строке. Если подстрока не найдена, возвращается число -1
  • replace(old, new[, num]) : заменяет в строке одну подстроку на другую
  • split([delimeter[, num]]) : разбивает строку на подстроки в зависимости от разделителя
  • partition(delimeter) : разбивает строку по разделителю на три подстроки и возвращает кортеж из трех элементов — подстрока до разделителя, разделитель и подстрока после разделителя
  • join(strs) : объединяет строки в одну строку, вставляя между ними определенный разделитель

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

string = input("Введите число: ") if string.isnumeric(): number = int(string) print(number)

Проверка, начинается или оканчивается строка на определенную подстроку:

file_name = "hello.py" starts_with_hello = file_name.startswith("hello") # True ends_with_exe = file_name.endswith("exe") # False

Удаление пробелов в начале и в конце строки:

string = " hello world! " string = string.strip() print(string) # hello world!

Дополнение строки пробелами и выравнивание:

print("iPhone 7:", "52000".rjust(10)) print("Huawei P10:", "36000".rjust(10))
iPhone 7: 52000 Huawei P10: 36000

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

Для поиска подстроки в строке в Python применяется метод find() , который возвращает индекс первого вхождения подстроки в строку и имеет три формы:

  • find(str) : поиск подстроки str ведется с начала строки до ее конца
  • find(str, start) : параметр start задает начальный индекс, с которого будет производиться поиск
  • find(str, start, end) : параметр end задает конечный индекс, до которого будет идти поиск

Если подстрока не найдена, метод возвращает -1:

welcome = "Hello world! Goodbye world!" index = welcome.find("wor") print(index) # 6 # поиск с 10-го индекса index = welcome.find("wor",10) print(index) # 21 # поиск с 10 по 15 индекс index = welcome.find("wor",10,15) print(index) # -1

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

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

  • replace(old, new) : заменяет подстроку old на new
  • replace(old, new, num) : параметр num указывает, сколько вхождений подстроки old надо заменить на new. По умолчанию num равно -1, что соответствует первой версии метода и приводит к замене всех вхождений.
phone = "+1-234-567-89-10" # замена дефисов на пробел edited_phone = phone.replace("-", " ") print(edited_phone) # +1 234 567 89 10 # удаление дефисов edited_phone = phone.replace("-", "") print(edited_phone) # +12345678910 # замена только первого дефиса edited_phone = phone.replace("-", "", 1) print(edited_phone) # +1234-567-89-10

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

Метод split() разбивает строку на список подстрок в зависимости от разделителя. В качестве разделителя может выступать любой символ или последовательность символов. Данный метод имеет следующие формы:

  • split() : в качестве разделителя используется пробел
  • split(delimeter) : в качестве разделителя используется delimeter
  • split(delimeter, num) : параметр num указывает, сколько вхождений delimeter используется для разделения. Оставшаяся часть строки добавляется в список без разделения на подстроки
text = "Это был огромный, в два обхвата дуб, с обломанными ветвями и с обломанной корой" # разделение по пробелам splitted_text = text.split() print(splitted_text) print(splitted_text[6]) # дуб, # разбиение по запятым splitted_text = text.split(",") print(splitted_text) print(splitted_text[1]) # в два обхвата дуб # разбиение по первым пяти пробелам splitted_text = text.split(" ", 5) print(splitted_text) print(splitted_text[5]) # обхвата дуб, с обломанными ветвями и с обломанной корой

Еще один метод — partition() разбивает строку по разделителю на три подстроки и возвращает кортеж из трех элементов — подстрока до разделителя, разделитель и подстрока после разделителя:

text = "Это был огромный, в два обхвата дуб, с обломанными ветвями и с обломанной корой" text_parts = text.partition("дуб") print(text_parts) # ('Это был огромный, в два обхвата ', 'дуб', ', с обломанными ветвями и с обломанной корой')

Если разделитель с строке не найден, то возвращается кортеж с одной строкой.

Соединение строк

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

words = ["Let", "me", "speak", "from", "my", "heart", "in", "English"] # разделитель - пробел sentence = " ".join(words) print(sentence) # Let me speak from my heart in English # разделитель - вертикальная черта sentence = " | ".join(words) print(sentence) # Let | me | speak | from | my | heart | in | English

Вместо списка в метод join можно передать простую строку, тогда разделитель будет вставляться между символами этой строки:

word = "hello" joined_word = "|".join(word) print(joined_word) # h|e|l|l|o

Метод Range.Find (Excel)

Хотите создавать решения, которые расширяют возможности Office на разнообразных платформах? Ознакомьтесь с новой моделью надстроек Office. Надстройки Office занимают меньше места по сравнению с надстройками и решениями VSTO, и вы можете создавать их, используя практически любую технологию веб-программирования, например HTML5, JavaScript, CSS3 и XML.

Синтаксис

выражение.Find (What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

выражение: переменная, представляющая объект Range.

Параметры

Имя Обязательный или необязательный Тип данных Описание
What Обязательный Variant Искомые данные. Может быть строкой или любым типом данных Microsoft Excel.
After Необязательный Variant Ячейка, после которой нужно начать поиск. Соответствует положению активной ячейки, когда поиск выполняется из пользовательского интерфейса.

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

Возвращаемое значение

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

Примечания

Этот метод возвращает значение Nothing, если совпадения не найдены. Метод Find не влияет на выделенный фрагмент или активную ячейку.

Параметры для аргументов LookIn, LookAt, SearchOrder и MatchByte сохраняются при каждом использовании этого метода. Если не указать значения этих аргументов при следующем вызове метода, будут использоваться сохраненные значения. Установка этих аргументов изменяет параметры в диалоговом окне Найти, а изменение параметров в диалоговом окне Найти приводит к изменению сохраненных значений, которые используются, если опустить аргументы. Чтобы избежать проблем, устанавливайте эти аргументы явным образом при каждом использовании этого метода.

Для повторения поиска используйте методы FindNext и FindPrevious.

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

Чтобы найти ячейки, отвечающие более сложным шаблонам, используйте инструкцию For Each. Next с оператором Like. Например, следующий код выполняет поиск всех ячеек в диапазоне A1:C5, где используется шрифт, имя которого начинается с букв Cour. Когда Microsoft Excel находит соответствующее значение, шрифт изменяется на Times New Roman.

For Each c In [A1:C5] If c.Font.Name Like "Cour*" Then c.Font.Name = "Times New Roman" End If Next` 

Примеры

В этом примере показано, как найти все ячейки в диапазоне A1:A500 на листе 1, содержащие значение 2, и изменить значение ячейки на 5. Таким образом, значения 1234 и 99299 содержали 2 и оба значения ячеек станут 5.

Sub FindValue() Dim c As Range Dim firstAddress As String With Worksheets(1).Range("A1:A500") Set c = .Find(2, lookin:=xlValues) If Not c Is Nothing Then firstAddress = c.Address Do c.Value = 5 Set c = .FindNext(c) Loop While Not c Is Nothing End If End With End Sub 

В этом примере показано, как найти все ячейки в диапазоне A1:A500 на листе 1, содержащие подстроку «abc», и изменить ее на «xyz».

Sub FindString() Dim c As Range Dim firstAddress As String With Worksheets(1).Range("A1:A500") Set c = .Find("abc", LookIn:=xlValues) If Not c Is Nothing Then firstAddress = c.Address Do c.Value = Replace(c.Value, "abc", "xyz") Set c = .FindNext(c) Loop While Not c Is Nothing End If End With End Sub 

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

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

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

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