Как посчитать количество символов перед тем, как определенное слово появилось несколько раз в ячейке в Google Sheets? - PullRequest
2 голосов
/ 19 июня 2019

Я нашел следующую формулу для подсчета количества символов, предшествующих определенному слову, в соответствии с приведенным здесь решением:

Подсчет количества символов перед определенным словом в ячейке

=SEARCH("apple",A2)-1

Моя проблема заключается в следующем:

Как посчитать промежуточные символы между двумя вхождениями одного и того же слова в одной ячейке?

Найден пример адаптации Николь здесь ):

"Мне нужно посчитать количество символов в текстовой строке перед словом. Например, скажем, слово" Apple ". и текстовая строка«Я сорвал яблоко с этого прекрасного дерева». В этом случае количество символов равно 13 ».

Допустим, мой пример:

« Я сорвал appleиз красного apple дерева ".

Формула =SEARCH("apple",A2)-1 возвращает количество символов до 1-го вхождения слова" apple ".Что было бы 13.

Как посчитать количество символов между двумя вхождениями слова "apple" с помощью скрипта?

Какой будет длина ", from the red"?

Или это можно сделать, адаптировав формулу =SEARCH("apple",A2)-1?

Большое спасибо за помощь и руководство!

Ответы [ 4 ]

3 голосов
/ 19 июня 2019

Функция поиска может принимать третий параметр, который находится в строке, в которой вы хотите начать поиск, поэтому, если вы найдете первый экземпляр «apple», а затем запустите другой поиск, начиная с этой позиции плюс 1, вы найдете второй экземпляр.

первый экземпляр:

=search("apple", A2)

второй экземпляр:

=search("apple", A2, search("apple", A2) + 1)

вычтите второе из первого:

=search("apple", A2, search("apple", A2) + 1) - search("apple", A2)

Чтобы просто определить длину между вами, нужно вычесть длину слова «яблоко» или что бы вы ни искали.

2 голосов
/ 19 июня 2019

Если вы хотите сделать это с помощью скрипта, вы можете поиграть с функциями «indexOf».Он считает количество символов от начала строки до введенного вами слова.indexOf работает следующим образом:

indexOf(string, [pos])

Если вы не укажете какую-либо позицию, она начнется с начала, в противном случае она будет считаться с введенной вами позиции.С учетом вышесказанного вы можете применить следующую логику:

var string = sheet.getRange("your cell").getValues().toString();

var apple_length = "apple".length;  
var first_apple = string.indexOf("apple") + apple_length;
var second_apple = string.indexOf("apple", first_apple);

var result = second_apple - first_apple;

Поскольку он считает до тех пор, пока не найдет слово, нам нужно добавить длину слова в формулу и использовать этот результат в качестве начальной позиции длявторой indexOf.

Для получения дополнительной информации, проверьте https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf

РЕДАКТИРОВАТЬ

var appletree = [];
var apple_length = "apple".length;
var char_counter = 0;

while (true) {

var apple = your_string.indexOf("apple", char_counter) + apple_length;

appletree.push(apple);

char_counter = char_counter + apple;


if (char_counter >= your_string.length) 
 break;

};
};

Это на самом деле проще и лучше, поскольку это не такНеважно, какую длину нити или сколько яблок вы положили.

1 голос
/ 19 июня 2019
=INDEX(LEN(SPLIT($A$1,"apple",0)))
  • SPLIT текст по apple
  • Рассчитать LEN gth каждой строки
  • INDEX, чтобы получить соответствующий индекс вмассив

    =INDEX(LEN(SPLIT($A$1,"apple",0)),2)
    

var str = "I plucked an apple, from the red apple tree";
var len = str.split('apple', 2).map(e=>e.length);
console.info(len);
console.info(len[1]);
0 голосов
/ 22 июня 2019
=FINDB("♥", SUBSTITUTE(A1, "apple", "♥"))-1

0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...