|
|
|
Нужен CompareText() с позицией первого отличного символа.
|
|||
|---|---|---|---|
|
#18+
Что-то гуглил-гуглил, так так ничего и не нашел. Нужно быстро сравнить две строки non-case-sensitive, в результате получить позицию первого символа, который различен в исходных строках. Длину строки учитывать при сравнении не надо. Боюсь, что если буду писать сам, получится криво и медленно. Можно сузить задачу: для списка файлов найти максимальный общий каталог. Быстро. Сам подумал про Код: pascal 1. 2. 3. 4. 5. Но поиски этого MaxLen займут немало времени. А вот тут Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. Нужное мне число наверняка есть, но как его достать, не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2019, 16:18 |
|
||
|
Нужен CompareText() с позицией первого отличного символа.
|
|||
|---|---|---|---|
|
#18+
Flying-home, можно тупо сравнивать строки посимвольно, приводя все символы к верхнему или нижнему регистру (ToLower или ToUpper) до первого отличия. Преобразование регистра конечно замедлит выполнение, а так я думаю, будет достаточно быстрый вариант. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Возвратит позицию или 0, если короткая строка совпадает с аналогичным отрезком более длинной строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2019, 16:32 |
|
||
|
Нужен CompareText() с позицией первого отличного символа.
|
|||
|---|---|---|---|
|
#18+
Flying-homeдля списка файлов найти максимальный общий каталог. имхо: создать список путей (удалив имена файлов, но оставив слэши в конце), элементы привести к одному регистру, отсортировать по алфавиту. Потом берем первый элемент. Это наш "бегунок". Проверить, содержит ли последний элемент* этот бегунок. Если да - это искомое, на выход Если нет - получить родительский каталог бегунка и на повтор предыдущей строчки * разумеется, проверка должна включать слэш в конце, чтобы не сработать на c:/foo и c:/foobar В итоге из затрат только сортировка и от силы 30-40 сравнений сверху (сколько там может быть вложенность, если специально не зарывать a\b\c\d...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2019, 17:35 |
|
||
|
Нужен CompareText() с позицией первого отличного символа.
|
|||
|---|---|---|---|
|
#18+
Василий 2Проверить, содержит ли последний элемент* этот бегунок. Если да - это искомое, на выход Почему именно последний - все элементы должны содержать общую часть, соответственно с точностью до неё все строки начинаются одинаково. Если последний элемент не содержит бегунок, значит, этот путь явно не м.б. общим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2019, 17:40 |
|
||
|
Нужен CompareText() с позицией первого отличного символа.
|
|||
|---|---|---|---|
|
#18+
По сортировке вопрос. Я просто не совсем ясно представляю себе, как работают StringList'ы. Мне надо первоначальный список оставить неизменным. Если я создам рабочий StringList и сделаю его строкам Assign строк первого листа, память под строки выделяться не будет. А если я в рабочем списке сделаю Sorted := true, под его строки выделится память? Хотелось бы этого избежать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2019, 18:26 |
|
||
|
Нужен CompareText() с позицией первого отличного символа.
|
|||
|---|---|---|---|
|
#18+
Василий 2Василий 2Проверить, содержит ли последний элемент* этот бегунок. Если да - это искомое, на выход Почему именно последний - все элементы должны содержать общую часть, соответственно с точностью до неё все строки начинаются одинаково. Если последний элемент не содержит бегунок, значит, этот путь явно не м.б. общим Да, действительно изящно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2019, 18:31 |
|
||
|
Нужен CompareText() с позицией первого отличного символа.
|
|||
|---|---|---|---|
|
#18+
Flying-homeПо сортировке вопрос. Я просто не совсем ясно представляю себе, как работают StringList'ы. Мне надо первоначальный список оставить неизменным. Если я создам рабочий StringList и сделаю его строкам Assign строк первого листа, память под строки выделяться не будет. А если я в рабочем списке сделаю Sorted := true, под его строки выделится память? Хотелось бы этого избежать. Нет, сортировка затронет только массив указателей на строки. Я так подумал, даже не нужно удалять имена файлов и приводить к общему регистру (разве что пути получены из разных источников). Просто Assign, Sort и дальше по схеме. Но если есть возможность путей с разным регистром - придется либо приводить к общему, либо сортировать без учета. Но это дольше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2019, 18:36 |
|
||
|
Нужен CompareText() с позицией первого отличного символа.
|
|||
|---|---|---|---|
|
#18+
Flying-homeЯ просто не совсем ясно представляю себе, как работают StringList'ы. они работают медленно нужна скорость и разумное использование памяти - используй TList<string> правда там нет все дополнительных фишект стринг-листа, типа парсинга строк Key=Value, но нужни ли они тебе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2019, 18:50 |
|
||
|
Нужен CompareText() с позицией первого отличного символа.
|
|||
|---|---|---|---|
|
#18+
Flying-homeполучить позицию первого символа, который различен в исходных строках. а если одна строка уже кончилась, а вторая ещё нет (но пока шли обе - разницы не было), что должно получиться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2019, 20:08 |
|
||
|
Нужен CompareText() с позицией первого отличного символа.
|
|||
|---|---|---|---|
|
#18+
Ariochони работают медленно нужна скорость и разумное использование памяти - используй TList<string> Обоснуешь? Ибо сильно сомневаюсь в этом. Если не трогать name-value и text, то никакой разницы с TList быть не должно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2019, 18:26 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39793739&tid=2039639]: |
0ms |
get settings: |
7ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
158ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 469ms |

| 0 / 0 |
