On-line: гостей 8. Всего: 8 [подробнее..]
АвторСообщение





Пост 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 более поздней даты, чем та, которую я использую сейчас, но безуспешно.
Может ли кто-нибудь дать ссылку на версию, которую я ищу?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 13 [только новые]







Пост N: 736
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 27.01.26 13:20. Заголовок: Может быть, проще ис..


Может быть, проще использовать обычный SUBSTR( cString, 2, 1 ) вместо поиска "другой" версии Harbour, поддерживающей странное (на мой взгляд) расширение языка ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 8234
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.01.26 15:13. Заголовок: Мирослав Ты про это..


Мирослав
Ты про это ?
 
LOCAL cString := "ABC"
Local elem

for each elem in cString
? elem , elem:__enumindex()
next


Спасибо: 0 
ПрофильЦитата Ответить





Пост 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

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 37
Зарегистрирован: 27.08.23
ссылка на сообщение  Отправлено: 27.01.26 17:03. Заголовок: Индексация стрингов


@Sergy

Ну, то же самое есть и в C — к элементам строки можно обращаться как к элементам одномерного массива. Мне это свойство строк понравилось, и когда искусственный интеллект (AI) сказал мне, что то же самое возможно и в Harbour, я захотел реализовать это у себя. Как-то визуально cString[2] мне нравится больше, чем SUBSTR( cString, 2, 1 )… 🙂

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 38
Зарегистрирован: 27.08.23
ссылка на сообщение  Отправлено: 27.01.26 17:11. Заголовок: @MIKHAIL Значит, xH..


@MIKHAIL

Значит, xHarbour поддерживает такую возможность. Но я работаю в Harbour и не хотел бы менять его после стольких лет…

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 39
Зарегистрирован: 27.08.23
ссылка на сообщение  Отправлено: 27.01.26 17:15. Заголовок: Индексация стрингов


@Dima

То, что ты написал, в порядке, но меня интересует именно то, что я указал: cString[n], если это вообще возможно…

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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 указать

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 40
Зарегистрирован: 27.08.23
ссылка на сообщение  Отправлено: 28.01.26 00:24. Заголовок: Индексация стрингов


@Haz

Ну, это работает отлично! Большое спасибо! У нас, у Сербов, есть одна народная пословица: «Добрый совет золота стоит»… Этим моя проблема решена.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2029
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.01.26 09:15. Заголовок: Мирослав пишет: Ну,..


Мирослав пишет:

 цитата:
Ну, это работает отлично!


В таком исполнении еще и присвоение вроде должно работать
cStr[2] := "x"
? cStr

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 41
Зарегистрирован: 27.08.23
ссылка на сообщение  Отправлено: 28.01.26 13:09. Заголовок: Индексация стрингов


Haz пишет:

 цитата:
В таком исполнении еще и присвоение вроде должно работать



Я попробовал — и это работает! Раз уж об этом зашла речь, я посмотрел файл xhb.ch и ещё некоторые файлы *.ch, которые он подключает, и увидел там много директив #translate (Harbour → xHarbour). Не нарушит ли это работу каких-нибудь моих программ, если я подключу xhb.ch?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 8235
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 28.01.26 20:08. Заголовок: Мирослав пишет: Не ..


Мирослав пишет:

 цитата:
Не нарушит ли это работу каких-нибудь моих программ, если я подключу xhb.ch?


Попробуй выяснить какие из #xtranslate , #xcommand из CH отвечают за работу такой
конструкции и затем только их у себя и включи в исходнике , без линковки либы XHB
Это только моё предположение....

Спасибо: 0 
ПрофильЦитата Ответить





Пост 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] и ничего больше. А именно это мне и было нужно.
Возможно, кому-то ещё это будет полезно.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




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


Мирослав

Спасибо: 1 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 8
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет