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

По сути, я должен написать формулу в Google Sheets, где я могу заменить все вхождения определенного числа на другое после того, как оно уже появилось один раз.

Например, определенная строка говорит "Draw {0} cards." Где {0} — это число переменной, которое будет заменено другой строкой на более позднем этапе (значение, конкретное слово и т. д.).

Я должен объединить этот результат с другой конкретной строкой, которая говорит:

"Deal {0} damage."

Это должно выглядеть так: "Draw {0} cards. Deal {0} damage." Однако система не содержит таких строк, поэтому формула должна изменить выражение на "Draw {0} cards. Deal {1} damage.". Это означает, что всякий раз, когда число уже появилось в строке, его следующее вхождение должно быть заменено следующим.

Я знаю, что могу использовать такие формулы, как

=SUBSTITUTE(B27;"0";"1";2)

Где B27 — это ячейка, в которой я объединяю две предыдущие строки.

Основная проблема здесь в том, что обычно я не буду объединять только две разные строки. Иногда существует более 3 или 4 строк, и в большинстве случаев эти строки имеют свои собственные переменные в последовательности.

Например, если бы я объединил эти три разные строки, предыдущая формула не работала бы должным образом:

"Draw {0} cards."
"Deal {0} damage to {1} players."
"Gain {0} life and discard {1} cards."

Простое объединение этих строк приведет к:

"Draw {0} cards. Deal {0} damage to {1} players. Gain {0} life and discard {1} cards."

Но для того, чтобы это сработало, я должен получить такой результат:

"Draw {0} cards. Deal {1} damage to {2} players. Gain {3} life and discard {4} cards."

Может ли кто-нибудь здесь помочь мне с формулой, которая могла бы решить эту проблему? Есть ли какая-нибудь формула Google Sheets, которая может помочь? Я имею в виду, что я гейм-дизайнер, а не программист, поэтому мне немного сложнее работать со сценариями и некоторыми кодовыми решениями.

Спасибо вам большое за ваше внимание.

Просто чтобы убедиться, что я правильно понимаю: «счетчик» увеличивается независимо от начального {значения} в скобках? Итак, "{0}..{2}..{2}..{3}..{2}..{12}" должно превратиться в "{0}..{1}..{2}.. {3}..{4}..{5}"?

badermart 22.01.2019 19:06

да. Точно. Независимо от начальных значений конечный результат всегда должен отображать последовательность {0}...{1}...{2}... и т. д.

Matheus Funfas 22.01.2019 19:45
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
33
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

вы можете сделать это так:

 = """Draw {"&C2&"} cards."""&CHAR(10)&
 """Deal {"&D2&"} damage to {"&E2&"} players."""&CHAR(10)&
 """Gain {"&F2&"} life and discard {"&G2&"} cards."""

1


или вы можете сделать это так:

 = """Draw {"&D11&"} cards."""&CHAR(10)&
 """Deal {"&D11+1&"} damage to {"&D11+2&"} players."""&CHAR(10)&
 """Gain {"&D11+3&"} life and discard {"&D11+4&"} cards."""

Спасибо, player0. Однако я не могу изменить существующие строки, потому что они взяты из ранее установленной базы данных. Максимум, что я могу изменить, — это формулы в ячейке, которая объединяет эти строки.

Matheus Funfas 22.01.2019 20:11
Ответ принят как подходящий

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

Следующий сценарий принимает строку в качестве входных данных, а затем просто заменяет все вхождения {0}, {2}, {4} и т. д. и заменяет их правильными числами.

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

// String used for tests

var string = 'Draw {0} cards.Deal {0} damage to {1} players.Gain {0} life and discard {1} cards.'

// Actual function

function changeString(input){
   
var re = /({[0-9]{1,5}})/g;
var totalMatches = count(input);
  
// Internal function to count the occurrance of matches of {number} (up 
to five digits inside brackets)

function count(input){
  return ((input || '').match(re) || []).length
}

// Internal function to replace the n-th input and return a modified 
string

function replaceNthElement(input, re, n, transform) {
  let count = 0;

  return input.replace(
    re, 
    match => n(++count) ? transform(match) : match);
}

// Iterating over the string in order to change all occurrences of 
{number}

for (var n = 0; n <= totalMatches; n++) {

  input = replaceNthElement(input, re, count => count === n, sstr => '{' + (n-1) + '}');
}
return input;
};

// for demonstration only

console.info("Original String: " + string);
console.info("Changed String: " + changeString('Draw {0} cards.Deal {0} damage to {1} players.Gain {0} life and discard {1} cards.'));

Основные концепции взяты из других статей о переполнении стека, а именно это и тот.

Другие вопросы по теме

Похожие вопросы

Google Sheets — автоматический выбор параметра из существующего раскрывающегося меню на основе данных другой ячейки
Как манипулировать строкой, представляющей необработанное число (например, 130000,1293), в форматированную строку (например, 130 000,13)?
Формула Google Sheets, чтобы определить, выделен ли текст в ячейке курсивом
Есть ли способ отфильтровать уникальные значения на одной вкладке и динамически отображать их в указанном столбце на другой?
Скопируйте данные с одного листа Google Sheet на другой с помощью скрипта и веб-приложения
Электронные таблицы Google - hlookup применяется к новым строкам с использованием формулы массива
Создание столбца Top 3 на основе категории столбца с ответами в строке
Автоматически скрывать/показывать строки Google Spreadsheet
Не удалось открыть надстройку «Документы в электронной таблице». openByUrl() нет разрешения
Как написать скрипт для автоматической загрузки/вставки изображений, сохраненных на общем диске?