| Автор | Сообщение |
|
|
| |
Пост N: 8348
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.07.26 18:41. Заголовок: Строка как массив
c:="12345" c[3]:="9" надо подключать xhb.ch что то склероз у меня а какое объявление в hbcompat.ch отвечает за такую работу ? просто хотел одной строкой прописать в начале проги что бы не подключать xhb.ch из xhb пошарился ....не  увидел с ходу
|
 |

|
|
Ответов - 10
[только новые]
|
|
|
|
| |
Пост N: 2062
Зарегистрирован: 20.02.11
|
|
Отправлено: 11.07.26 21:53. Заголовок: Dima пишет: пошарил..
|
 |

|
|
|
| |
Пост N: 8349
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.07.26 08:31. Заголовок: Haz Игорь я пробнул..
Haz Игорь я пробнул как Мирослав писал. Что то криво работает )) Чекнул, должно писать в строку но не пишет Подключил в своем prg снова xhb.ch и заработало норм
|
 |

|
|
|
| |
Пост N: 8350
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.07.26 09:01. Заголовок: остановился на Stuff..
остановился на Stuff
|
 |

|
|
|
| |
Пост N: 2063
Зарегистрирован: 20.02.11
|
|
Отправлено: 12.07.26 10:19. Заголовок: Dima пишет: хотя лу..
Dima пишет: Все зависит от задачи При байтовых операциях лидирует hb_peek(), но работает в числовых кодах.работает быстро без временных строк, но если нужно пересобрать строку и даже hb_broke() будет тормозить, тут быстрее substr(). При замене и встаке stuff() быстрее. Но есть Один нюанс в харбуре строки неизменяемый напрямую, то есть при каждом изменении создается измененная новая строка. Если строка длинная и замен в ней много то столько же будет и новых созданных строк и выделений памяти под них. Это проблема харбура. Тут только вызов С функции поможет. Большинство задач на harbour не так критичны к скорости выполнения операций, но бывают исключения (например протоколы обмена между устройствами могут валиться из-за короткого таймаута устройства) В общем своя функция под задачу лучше, но зависит от задачи 
|
 |

|
|
|
| |
Пост N: 8351
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.07.26 12:09. Заголовок: смотри какой прикол ..
смотри какой прикол обнаружил cc:="00000000" cc:=StrTran( cc, "0", "1", 1, 1 ) cc:=StrTran( cc, "0", "1", 2, 1 ) cc:=StrTran( cc, "0", "1", 5, 1 ) cc:=StrTran( cc, "0", "1", 3, 1 ) cc:=StrTran( cc, "0", "1", 4, 1 ) ? cc cc:="00000000" cc:=STuff( cc,1,1,"1" ) cc:=STuff( cc,2,1,"1" ) cc:=STuff( cc,5,1,"1" ) cc:=STuff( cc,3,1,"1" ) cc:=STuff( cc,4,1,"1" ) ? cc wait Результат StrTran 10101011 что не верно Результат Stuff 11111000 верно Что за прикол ? Первый Strtran отработал верно а дальше всё в молоко Если с XHB.CH и XHB тоже нормально
|
 |

|
|
|
| |
Пост N: 8353
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.07.26 12:19. Заголовок: Проехали ... Gemini ..
Проехали ... Gemini гугла объяснил Это фича такая в StrTran 
|
 |

|
|
|
| постоянный участник
|
Пост N: 4898
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.07.26 18:04. Заголовок: Dima cc:="00000..
Dima cc:="00000000" FOR EACH c IN cc IF hb_enumIndx(c) > 5 ;EXIT ENDIF IF c == "0" ; c := "1" ENDIF NEXT ? cc PS. FOR EACH c1, c2, c3 IN cc1, cc2, cc3 ... NEXT
|
 |

|
|
|
| |
Пост N: 8354
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.07.26 19:49. Заголовок: SergKis Сергей вопр..
SergKis Сергей вопрос был не про то как это реализовать, я про замену. А почему так своеобразно отработал StrTran..в нортон гайде как бы про эту фичу нет ни чего. AI предложил самый быстрый вариант STUFF и он не перебирает всю строку.
|
 |

|
|
|
| постоянный участник
|
Пост N: 4899
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.07.26 20:04. Заголовок: Dima Когда то Stuff..
Dima Когда то Stuff, товарищ писал на С, т.к. родной проделывал с перемещением текста (сейчас не знаю, не смотрел), а for each делает замену в исходной строке, т.е. c := "1" делает замену в строке cc и если накручивать алгоритмы, то это неплохой вариант, по мне
|
 |

|
|
|
| |
Пост N: 8355
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.07.26 20:47. Заголовок: SergKis OK..
SergKis OK
|
 |

|
|