|
|
|
Аналог функции Split в Delphi
|
|||
|---|---|---|---|
|
#18+
Доброе время суток всем, читающим. А может кто подскажет, такую весчь. В VisualBasic есть функция : Split(string, delimiter) получает строку string и символ-разделитель delimiter возвращает массив который получается разбиением строки string на части по разделителю delimiter. Т.е. вызов Split("whatafuck","a") вернет массив из трех элементов: wh t fuck Может есть альтернатива такой функции в Delphi ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2005, 10:31 |
|
||
|
Аналог функции Split в Delphi
|
|||
|---|---|---|---|
|
#18+
DelimitedText property (TStrings) Represents all the strings in the TStrings object as a single delimited string. Delphi syntax: property DelimitedText: string; Description Use DelimitedText to get or set all the strings in the TStrings object in a single string. When reading DelimitedText, the resulting value delimits individual strings in two ways: each string is surrounded (before and after) by the quote character specified by the QuoteChar property. In addition, individual strings are separated by the character specified by the Delimiter property. When writing DelimitedText, individual strings must be separated using QuoteChar at both ends, using Delimiter as a separator, or using both these methods. Note: CommaText is the same as the DelimitedText property when Delimiter is ',' and QuoteChar is '"'. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2005, 10:38 |
|
||
|
Аналог функции Split в Delphi
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2005, 10:40 |
|
||
|
Аналог функции Split в Delphi
|
|||
|---|---|---|---|
|
#18+
спасибо ... однако ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2005, 08:56 |
|
||
|
Аналог функции Split в Delphi
|
|||
|---|---|---|---|
|
#18+
Вот попробовал, однако, таким способом разбивать на куски текст разделенный символом ; (точка_запятой)... в итоге получается какая-то ерунда. Delimiter у меня соответсвенно точка_с_запятой, а разбивается текст не толко по точке с запятой но и почему-то по некоторым пробелам ?!?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2005, 10:09 |
|
||
|
Аналог функции Split в Delphi
|
|||
|---|---|---|---|
|
#18+
anjeyВот попробовал, однако, таким способом разбивать на куски текст разделенный символом ; (точка_запятой)... в итоге получается какая-то ерунда. Delimiter у меня соответсвенно точка_с_запятой, а разбивается текст не толко по точке с запятой но и почему-то по некоторым пробелам ?!?! А может это не "пробелы", а "перевод строки" (#13#10)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2005, 10:16 |
|
||
|
Аналог функции Split в Delphi
|
|||
|---|---|---|---|
|
#18+
нет, обычный пробел :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2005, 10:41 |
|
||
|
Аналог функции Split в Delphi
|
|||
|---|---|---|---|
|
#18+
Ну, что-нить такое: Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2005, 10:53 |
|
||
|
Аналог функции Split в Delphi
|
|||
|---|---|---|---|
|
#18+
Если эта тема еще кого нибудь интересует, то могу предложить следующее решение: Код: 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. Если все-же хочеться реализовать Split через TStrings, то лучше создать его потомка и переписать пару методов, где знак пробела(и не только) прописан на мертво: в "procedure TStrings.SetDelimitedText(const Value: string);" есть, к примеру цикл с таким интересным условием: "while (P^ > ' ') and (P^ <> Delimiter) do" или в "function TStrings.GetDelimitedText: string;" наши строки читаются в цикле с таким условием: "while not (P^ in [#0..' ', QuoteChar, Delimiter]) do". - Как видите, для поклонников Split'a все складывается очень плохо :) Тем более, если представить, что разделителем может потребоваться использовать не один символ, а два или вообще целое слово. Да и потом не забывайте, что в TStrings есть еще такой параметр, как "NameValueSeparator", который по умолчанию равен '='. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2005, 08:36 |
|
||
|
Аналог функции Split в Delphi
|
|||
|---|---|---|---|
|
#18+
StringRepace тебе поможет укажеш что искать и на что менять .. и вуаля ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2005, 10:30 |
|
||
|
Аналог функции Split в Delphi
|
|||
|---|---|---|---|
|
#18+
JozoStringRepace тебе поможет укажеш что искать и на что менять .. и вуаля Replace??? А зачем он мне? Если мне нужно из COM объекта написанного на VB6 передать сложную строковую структуру (с размером некоторых элементов больше 255 символов) в сервис-сервер, а из него переслать удаленному клиенту? А перед этим скормить серверу часть параметров для сборки строки подключения, SQL-запрос и еще ряд переменных параметров? Что и на что я там буду менять? А со Split'ом я премило все разделяю на массивы строк, пользуясь специфическими разделителями, типа #6,#7,#8,#10,#13. И Replace, тут точно, ну ни каким местом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2005, 12:57 |
|
||
|
Аналог функции Split в Delphi
|
|||
|---|---|---|---|
|
#18+
FM_Xenon вопрос был вобщето такой : anjeyДоброе время суток всем, читающим. А может кто подскажет, такую весчь. В VisualBasic есть функция : Split(string, delimiter) получает строку string и символ-разделитель delimiter возвращает массив который получается разбиением строки string на части по разделителю delimiter. Т.е. вызов Split("whatafuck","a") вернет массив из трех элементов: wh t fuck Может есть альтернатива такой функции в Delphi ? и что мешает зделать так ............... t:=TStringList.create; t.text:=stringReplace('whatafuck','a',#13#10,[rfReplaceAll]); showmessage(t[0]); // -- wh ............... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2005, 14:01 |
|
||
|
Аналог функции Split в Delphi
|
|||
|---|---|---|---|
|
#18+
Попробуй. Я вот этим пользуюсь. Правда требует QStrings Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2005, 16:09 |
|
||
|
Аналог функции Split в Delphi
|
|||
|---|---|---|---|
|
#18+
Если нет QStrinngs то вот Q_PosStr Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2005, 16:10 |
|
||
|
Аналог функции Split в Delphi
|
|||
|---|---|---|---|
|
#18+
JozoFM_Xenon вопрос был вобщето такой : anjeyДоброе время суток всем, читающим. А может кто подскажет, такую весчь. В VisualBasic есть функция : Split(string, delimiter) получает строку string и символ-разделитель delimiter возвращает массив который получается разбиением строки string на части по разделителю delimiter. Т.е. вызов Split("whatafuck","a") вернет массив из трех элементов: wh t fuck Может есть альтернатива такой функции в Delphi ? и что мешает зделать так ............... t:=TStringList.create; t.text:=stringReplace('whatafuck','a',#13#10,[rfReplaceAll]); showmessage(t[0]); // -- wh ............... Вы в серьез думете, что человеку нужно было распихать "watafuck" в массив? А если будет "what a fuck"? Будем сначала пробелы заменять на, допустим '#', потом распихивать в ТStrings, а потом пустим цикл по строкам и заменим '#' обратно на #32? Ну если речь идет только о "what a fuck", то возможно так и стоит сделать... Хотя, как-то кривовато. А если такая строка: "C:\MyBase\Old Base\my base.mdb[#7]Admin[#8][#7]REESTR[#8]Дата выдачи[#8]Срок действи[#8]Разрешения[#8]SubText[#8]ИНН=78021202144[#7]IsAdd^Разрешения[#6]2100240[#17]Сбор, переработка и реализация группы 1[#11]2100241[#17]Сбор, переработка и реализация группы 2[#11]2100242[#17]Сбор, переработка и реализация группы 3[#11]2100243[#17]Сбор, переработка и реализация группы 4[#11]2200162[#17]Лабораторный анализ материалов[#4]SubText[#6]В соответсвии со ст. 12 п.1 Положения о деятельности металлургических предприятий (во исполнение ст. 71 [#13#10]Закона Занзибара о Разрешениях), приказом №34 от 12.11.05 Федеральной комисии, назначена проведена проверка [#13#10] деятельности предприятия. Ввиду особых разпоряжений комиссии, в ходе проверки [#13#10] были выявлены следующие недостатки:[#13#10] %112;[#13#10] %12;[#13#10] %76;[#13#10] %210;[#13#10] %7.[#13#10] Для утранения выявленных недостатков предприятию установлен срок до 12.12.05.[#13#10] Председатель Комиссии:[#13#10] В.В.Пупкин."[#2]SysLog=Прохоров^SysPas=1aUTYw4oG^End^" Ну и как быть с этим? Или все же будете опять твердить про "watafuck" и кривой TStrings? Вопрос-то, на самом деле, был про аналог Split'a. А Split в описанном мой случае не заменим. Тем более, когда нужно правильно считать структуру собранную по определенным правилам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2005, 20:44 |
|
||
|
Аналог функции Split в Delphi
|
|||
|---|---|---|---|
|
#18+
Объеденил я тут все выше изложенное и вместо TStringsa подставил динамический строчный массив (type StrArr=array of String;). Работает все очень быстро - по скорости не уступает импортированному из dll-ки vb'шному Split'у! И память практически не отжирает. Короче - моя очень довольна! Особое спасибо Pavlu Tsukanovu за ассемблерный код! Первая функция использует в качестве разделителя только символ, а вторая строку. Если передавать возвращаемый массив через Result(Variant) - будут тормоза. Код: 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. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2005, 17:56 |
|
||
|
Аналог функции Split в Delphi
|
|||
|---|---|---|---|
|
#18+
P.S.: FM_XenonПервая функция использует в качестве разделителя только символ, а вторая строку. - С точностью до на оборот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2005, 17:59 |
|
||
|
Аналог функции Split в Delphi
|
|||
|---|---|---|---|
|
#18+
Вот исправленный код Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2016, 18:51 |
|
||
|
Аналог функции Split в Delphi
|
|||
|---|---|---|---|
|
#18+
В этом тысячелетии делают так: 'kisa;kuku'.Split(';'); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2016, 20:02 |
|
||
|
Аналог функции Split в Delphi
|
|||
|---|---|---|---|
|
#18+
Nomad_RazorВот исправленный код Прошло 11 лет. Не надо такой код показывать, он некрасивый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2016, 23:15 |
|
||
|
Аналог функции Split в Delphi
|
|||
|---|---|---|---|
|
#18+
...другой вопрос, а что такое "массив из трех элементов"??? StringReplace('whatafuck', 'a', #13#10, [rfReplaceAll]); или: StringReplace('whatafuck'#0#0, 'a', #0, [rfReplaceAll]); ?????? или: Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2016, 23:39 |
|
||
|
Аналог функции Split в Delphi
|
|||
|---|---|---|---|
|
#18+
SplitString быстрее будет, чем TStringList. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2016, 09:17 |
|
||
|
Аналог функции Split в Delphi
|
|||
|---|---|---|---|
|
#18+
Выбираем понравившийся: http://stackoverflow.com/questions/2625707/split-a-string-into-an-array-of-strings-based-on-a-delimiter Сканирование 'вдоль' строки на предмет поиска сепаратора с последующим копированием кусков в массив мне видится одним из самых быстрых реализаций, если не самой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2016, 10:08 |
|
||
|
Аналог функции Split в Delphi
|
|||
|---|---|---|---|
|
#18+
wadmanSplitString быстрее будет, чем TStringList.Кстати да. В D2010 этой функции ещё нет, а в XE3 уже, наконец, есть, модуль StrUtils. На днях обнаружил и впервые использовал. ) Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2016, 13:02 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=33032671&tid=2039138]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
163ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 200ms |
| total: | 472ms |

| 0 / 0 |
