1 (изменено: Belo4kaVspishka, 2018-08-10 17:31:32)

Тема: AHK: Узнать номера ячеек в которых есть символ

Здравствуйте, уважаемые форумчане. Имеется строка которая представляет собой строчку из скачанной в SCV формат таблицу, в девяносто столбцах этой таблицы может быть символ Y или N или пустота (в каждой ячейке по одному символу или пустота). В скачанном виде ячейки разделяются запятой, потому шаблон выглядит примерно так (он укорочен):

ненужная часть строки,,Y,,,,,,,,N,,,,,Y,,,,,,(около 90 ячеек),0,

Есть две задачи:
1) узнать все номера этих ячеек (начиная с 1) в которых есть, допустим, символ Y;
2) узнать какое значение конкретной ячейки (например 42).

За решение или подсказку в решении любой из задач я буду вам очень благодарен.

2

Re: AHK: Узнать номера ячеек в которых есть символ

Играйтесь. https://autohotkey.com/docs/commands/StringLen.htm

3

Re: AHK: Узнать номера ячеек в которых есть символ

qqlexa, а как эта команда поможет автору вопроса?
Belo4kaVspishka,
https://autohotkey.com/docs/commands/LoopParse.htm

4

Re: AHK: Узнать номера ячеек в которых есть символ

Вообще, для работы с таблицами/матрицами идеальны массивы, особенно, если полученные данные изменяются в течение работы сценария.
StrSplit() - формирует из строки массив по символу-разделителю, у Вас это запятая, таким образом, содержимое между ними будет доступно по индексу, например 42:


str := "ненужная часть строки,,Y,,,,,,,,N,,,,,Y,,,,,,(около 90 ячеек),0"
resultArray := StrSplit(str, ",")
MsgBox,% resultArray[1]	; Первый элемент
MsgBox,% resultArray[42]	; 42 элемент

Чтобы перебрать все элементы массива в поиске нужного символа символа в каждом из них:


str := "ненужная часть строки,,Y,,,,,,,,N,,,,,Y,,,,,,(около 90 ячеек),0"
resultArray := StrSplit(str, ",")

indexLetters := FindLetter(resultArray, "Y")
completeStr := "Всего найдено совпадений '" . indexLetters.Length() . "', в ячейках:`n"
For k, v in indexLetters
	completeStr .= v . "`n"
MsgBox,% completeStr
return
FindLetter(array, letter) {
	findedLetters := []
	For k, v in array
		if (InStr(v, letter))
			findedLetters.Push(k)
	Return findedLetters
}

5

Re: AHK: Узнать номера ячеек в которых есть символ

Спасибо большое.

6

Re: AHK: Узнать номера ячеек в которых есть символ

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

7

Re: AHK: Узнать номера ячеек в которых есть символ

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

8

Re: AHK: Узнать номера ячеек в которых есть символ

Безусловно, но если заглянуть в перспективу и там окажется, что какие-то ещё данные из таблицы будут нужны, то "дешевле" их получать по индексу, а учитывая постановку задачи, это выглядит вероятным более чем.

9

Re: AHK: Узнать номера ячеек в которых есть символ

KusochekDobra,

To split a string that is in standard CSV (comma separated value) format, use a parsing loop since it has built-in CSV handling.

https://autohotkey.com/docs/commands/St … #Remarks_8

If this parameter is CSV, InputVar will be parsed in standard comma separated value format. Here is an example of a CSV line produced by MS Excel:

"first field",SecondField,"the word ""special"" is quoted literally",,"last field, has literal comma"

https://autohotkey.com/docs/commands/LoopParse.htm

10

Re: AHK: Узнать номера ячеек в которых есть символ

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

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