| Автор | Сообщение |
|
|
| |
Пост N: 36
Зарегистрирован: 27.08.23
|
|
Отправлено: 26.01.26 23:20. Заголовок: Индексация стрингов
Некоторое время назад я скачал Harbour 3.4.0dev (669f310ff4) (2018-04-28 17:24) и перекомпилировал HWGui 2.23 b7. Всё работает как положено. Я писал одну программу и консультировался с искусственным интеллектом (AI) по поводу одной функции. В этой функции было использовано следующее: LOCAL cString := "ABC" ... ? cString[2] // → "B" И мне сказали, что существуют более новые версии Harbour, которые поддерживают индексацию строк (string). Я пытался найти в интернете версию Harbour более поздней даты, чем та, которую я использую сейчас, но безуспешно. Может ли кто-нибудь дать ссылку на версию, которую я ищу?
|
 |

|
|
Ответов - 13
[только новые]
|
|
|
|
| |
Пост N: 736
Зарегистрирован: 08.07.06
|
|
Отправлено: 27.01.26 13:20. Заголовок: Может быть, проще ис..
Может быть, проще использовать обычный SUBSTR( cString, 2, 1 ) вместо поиска "другой" версии Harbour, поддерживающей странное (на мой взгляд) расширение языка ?
|
 |

|
|
|
| |
Пост N: 8234
Зарегистрирован: 17.05.05
|
|
Отправлено: 27.01.26 15:13. Заголовок: Мирослав Ты про это..
Мирослав Ты про это ? LOCAL cString := "ABC" Local elem for each elem in cString ? elem , elem:__enumindex() next
|
 |

|
|
|
| |
Пост N: 375
Зарегистрирован: 05.10.06
|
|
Отправлено: 27.01.26 16:52. Заголовок: xHarbour Reference D..
xHarbour Reference Documentation > Operator Reference xHarbour Developers Network [ ] (array) Operator Reference ˆˆ [ ] (string) Character operator (unary): retrieves a character from a string. Syntax <cString>[<nPos>] Arguments <cString> <cString> is a character string containing at least one character. <nPos> <nPos> is a numeric expression which indicates the ordinal position of the character to retrieve. Description The character retrieves a single character at position <nPos> from the string <cString>. The value for <nPos> mus be in the range of 1 to Len(<cString>). Note: if <nPos> is a negative value, the operator retrieves the character Abs(<nPos>) from the end of the the string. Info See also: [ ] (array), SubStr() Category: Character operators , Operators , Special operators , xHarbour extensions LIB: xhb.lib DLL: xhbdll.dll
|
 |

|
|
|
| |
Пост N: 37
Зарегистрирован: 27.08.23
|
|
Отправлено: 27.01.26 17:03. Заголовок: Индексация стрингов
@Sergy Ну, то же самое есть и в C — к элементам строки можно обращаться как к элементам одномерного массива. Мне это свойство строк понравилось, и когда искусственный интеллект (AI) сказал мне, что то же самое возможно и в Harbour, я захотел реализовать это у себя. Как-то визуально cString[2] мне нравится больше, чем SUBSTR( cString, 2, 1 )… 🙂
|
 |

|
|
|
| |
Пост N: 38
Зарегистрирован: 27.08.23
|
|
Отправлено: 27.01.26 17:11. Заголовок: @MIKHAIL Значит, xH..
@MIKHAIL Значит, xHarbour поддерживает такую возможность. Но я работаю в Harbour и не хотел бы менять его после стольких лет…
|
 |

|
|
|
| |
Пост N: 39
Зарегистрирован: 27.08.23
|
|
Отправлено: 27.01.26 17:15. Заголовок: Индексация стрингов
@Dima То, что ты написал, в порядке, но меня интересует именно то, что я указал: cString[n], если это вообще возможно…
|
 |

|
|
|
| |
Пост N: 2028
Зарегистрирован: 20.02.11
|
|
Отправлено: 27.01.26 22:37. Заголовок: Мирослав пишет: ука..
Мирослав пишет: | цитата: | | указал: cString[n], если это вообще возможно |
| Все возможно #include "xhb.ch" Func test() Local cStr := "qwerty" ? cStr[2] Return nil И не забываем xhb.lib указать
|
 |

|
|
|
| |
Пост N: 40
Зарегистрирован: 27.08.23
|
|
Отправлено: 28.01.26 00:24. Заголовок: Индексация стрингов
@Haz Ну, это работает отлично! Большое спасибо! У нас, у Сербов, есть одна народная пословица: « Добрый совет золота стоит»… Этим моя проблема решена. 
|
 |

|
|
|
| |
Пост N: 2029
Зарегистрирован: 20.02.11
|
|
Отправлено: 28.01.26 09:15. Заголовок: Мирослав пишет: Ну,..
Мирослав пишет: | цитата: | | Ну, это работает отлично! |
| В таком исполнении еще и присвоение вроде должно работать cStr[2] := "x" ? cStr
|
 |

|
|
|
| |
Пост N: 41
Зарегистрирован: 27.08.23
|
|
Отправлено: 28.01.26 13:09. Заголовок: Индексация стрингов
Haz пишет: | цитата: | | В таком исполнении еще и присвоение вроде должно работать |
| Я попробовал — и это работает! Раз уж об этом зашла речь, я посмотрел файл xhb.ch и ещё некоторые файлы *.ch, которые он подключает, и увидел там много директив #translate (Harbour → xHarbour). Не нарушит ли это работу каких-нибудь моих программ, если я подключу xhb.ch?
|
 |

|
|
|
| |
Пост N: 8235
Зарегистрирован: 17.05.05
|
|
Отправлено: 28.01.26 20:08. Заголовок: Мирослав пишет: Не ..
Мирослав пишет: | цитата: | Не нарушит ли это работу каких-нибудь моих программ, если я подключу xhb.ch? |
| Попробуй выяснить какие из #xtranslate , #xcommand из CH отвечают за работу такой конструкции и затем только их у себя и включи в исходнике , без линковки либы XHB Это только моё предположение.... 
|
 |

|
|
|
|
|
| |
Пост N: 42
Зарегистрирован: 27.08.23
|
|
Отправлено: 28.01.26 22:43. Заголовок: Dima пишет: Попробу..
Dima пишет: | цитата: | | Попробуй выяснить какие из #xtranslate , #xcommand из CH отвечают за работу |
| Я внимательно просмотрел все файлы *.ch, начиная с xhb.ch, а также все остальные, которые в нём подключаются. Мне не удалось найти ни одного #xtranslate, который бы обеспечивал индексацию строк. Я обратил внимание на директиву REQUEST xhb_Lib. Я спросил искусственный интеллект, и он подсказал сделать один xhb_init.prg-файл со следующим содержимым: #include "xhb.ch" PROCEDURE xhb_init() RETURN Это означает, что в моих программах будет работать только cString[n] и ничего больше. А именно это мне и было нужно. Возможно, кому-то ещё это будет полезно.
|
 |

|
|
|
| |
Пост N: 8236
Зарегистрирован: 17.05.05
|
|
Отправлено: 29.01.26 18:57. Заголовок: Мирослав :sm36:..
Мирослав 
|
 |

|
|