Форум "Delphi"
Паскаль, Делфи
#0 bobi © 27.08.07 18:53:46 - 05.09.07 19:19:28 Как прочитатькак в delphi прочитать строку до пробела???
|
|
откуда? из файла/строки/...? |
|
#2 bobi © 27.08.07 21:43:12
строка:qqqqqqq wwwwwww ssssssss. нужно прочитать qqqqqqq потом wwwwwww и потом ssssssss. |
unit Unit1; |
|
#4 bobi © 28.08.07 12:02:13
не спасиб я уже сам нашел и по меньше
|
|
>#4 bobi © "поменьше" ? это еще спорный вопрос мой пример работает с любым количеством слов, в строке могут быть символы перевода строк, результат помещается в удобный дальнейшего использования динамический массив... извините, хотел как лучше |
|
#6 bobi © 28.08.07 21:27:35
Да не спасибо конечно но "перевода строк" "динамический массив" для меня это непонятные слова а так просто и понятно. |
|
>#4 bobi © а если там больше трех слов? а если пробелов нет вообще? у тебя толко частный случай показан. тут надо в цикле wile pos(' ',s)>0 do и т.д. |
|
>#6 bobi © а если несколько пробелов подряд, твой код сработает? а возможно, и табуляцию надо учитывать? ну, я так понял у тебя была в первую очередь синтаксическаю проблема - тебе нужно было знать функции, которые работают со строками. Теперь ты их знаешь, так что возможно стоит поискать в своем техзадании и алгоритмические проблемы -- на некоторые из них мы тебе с Пашей указали. |
|
#9 bobi © 29.08.07 20:17:12
Вообще-то эти строки генерирует прога,а прога не может поставить 3 пробела подряд или 25 слов вместо 3 Не я согласен с вами что лучше использовать код deep`а но в моем случае лучше использовать этот: var s,x1,x2,x3:string; begin s:='qqqqqqq wwwwwww ssssssss'; x1:=copy(s,1,pos(' ',s)-1); delete(s,1,pos(' ',s)); x2:=copy(s,1,pos(' ',s)-1); delete(s,1,pos(' ',s)); x3:=s; end; Deep`у и Паше респект |
|
#10 Юрий Федоров © 30.08.07 22:38:28
Есть еще такая штука, как Delimiter и DelimitedText SL:=TStringList.Create; try SL.Delpmiter:=' '; SL.DelpmitedText:='qqqqqqq wwwwwww ssssssss'; //После этого SL[0] = 'qqqqqqq'; SL[1] = 'wwwwwww', и так далее finally SL.Free; end; |
|
>#10 Юрий Федоров © это в какой версии Дельфей? в пятерке, к примеру, еще такого нету. так шо ручками завсегда надежней. тем паче, ничего такого там военного нету. |
|
#12 Юрий Федоров © 31.08.07 10:56:53
>#11 Паша © 31.08.07 10:39:07 Фиг знает, в какой, по моему так уже 100 лет:-) в семерке точно уже было это в TStrings впрочем, я там опечатался property Delimiter: Char; property DelimitedText: string; |
|
>#12 Юрий Федоров © в пятерке еще нету. воть: TStrings properties Capacity CommaText Count Names Objects Strings StringsAdapter Text Values собстна, я поиск по ВСЛ сделал на предмет наличия,- нэма. |
|
#14 Юрий Федоров © 01.09.07 09:01:51
>#13 Паша © А чего не переходишь на новые? У меня D2007 - в целом доволен, куча новых примочек, в том числе расширения синтаксиса, которые реально помогают - хелперы для классов и записей, методы в записях, стрикт-секции, финализация классов и методов, перегрузка операторов, вложенные типы, поддержка нейм спесов в именах юнитов - это все очень хорошо улучшает жизнь программера :-) |
|
а какие требования у D2007 к железу? и как совместимость с компонентами под Делфи 7? Ставил D2005 - не понравилось да и тормозит. |
|
>#14 Юрий Федоров © очень большой проект, переписывать надо будет много, особенно компонеты. разделять рантайм и дизигнтайм. лениво, да и смысл, если и так работает, на пятерке? а при переделке глюки полезут, все по-новому тестить. нуевонафик. если начну новый проект, с нуля, то тогда можно будет попробовать, а пока и так проживу. а это шо за звери такие? > методы в записях > вложенные типы можно маленький примерчик? |
|
#17 Zdvitas © 04.09.07 19:53:55
Юзайте PAscal =)) Read(s) Ыыы=)) |
|
#18 Юрий Федоров © 04.09.07 19:54:56
Отмодерировал: Deep
|
|
#19 Юрий Федоров © 04.09.07 19:56:53
Deep : дубль
|
|
#20 Юрий Федоров © 04.09.07 20:05:37
>#15 Deep © > а какие требования у D2007 к железу? Да по моему не особые) не задумывался на эту тему) НА 512 метрах оперативки работает более менее сносно > Ставил D2005 - не понравилось да и тормозит. 2005 была очень неудачная и глючyая версия, после этого они исправились (в основном). > и как совместимость с компонентами под Делфи 7? Если компоненты с исходными кодами - то полная. Единственное что может потребоваться подправить - это если там встречаются директивы препроцессора с закладкой на версию - {$IFDEF VER120} {$ENDIF} - может понадобиться дописать новый IFDEF > #16 Паша © Метод в записях: type TMyRecord = record a: integer; b: Integer; function Summa: integer; end; function TMyRecord.Summa: Integer; begin Result:=a+b; end; можно еще переопределить операторы для записей, после чего станет доступно например var R1, R2, R3: TMyRecord; ... R3:=R1+R2; Вложенные типы type TMyClass = class private type TMySubclass1 = class private ... public ... end; public type TMySubclass2 = class ... end; private ... public ... end; Приватный вложенный тип виден только внутри класса-обертки а паблик тип виден снаружи в виде var X: TMyClass.TMySubclass2; для чего нужно - для скрытия информации, и для группировки связанных между собой типов. Вложенными могут быть не только типы=классы ,но и простые типы, и константы На всякий случай еще скажу на тему хелперов - они могут быть для классов и для записей TStringsHelper = class helper for TStrings public procedure DeleteEmptyStrings(); end; после этого у всех объектов TStrings и их потомков добавляется этот метод Memo1.Lines.DeleteEmptyStrings(); Написал хелпер для TRect - добавил BottomLeft, TopRight, Width, Height, методы Move, LpToDp и всякое такое. В общем, очень удобо |
|
#21 Юрий Федоров © 04.09.07 20:06:14
Чорт :-) |
|
>#21 Юрий Федоров © про хелперы первый раз слышу, но похоже действительно удобно получается, что если для готового проекта в какую-то стандартную и часто использованную компоненту/класс надо добавить функциональность, то это можно сделать через хелпер... при этом не плодятся наследники(обращение в коде идет к старому классу), ну и соответственно не надо ПРАВИТЬ УЖЕ НАПИСАННЫЙ КОД(те же объявления типа класса), только добавлять то что нужно. |
|
#23 Юрий Федоров © 05.09.07 09:51:40
>#22 Deep © 0 Ну да - это в первую очередь для тех случаев, когда код править нельзя (например, хелпер к классу из "генофонда"), если речь идет о своих классах, то я предпочитаю, где можно, добавлять методы в предка, где нельзя - использую хелперы. В принципе, метод хелпера - ровным счетом тоже самое, как просто процедура\функция, куда экземпляр класса передается параметром. (потому что данные в хелпер добавлять нельзя, только код) Но так нагляднее получается, и удается хорошо сгруппировать схожие методы, которые сразу видны в выпадающем списке после точки:-) |
|
>#20 Юрий Федоров © весьма занимательно... вероятно, надо срочно переходить на 2007 > var R1, R2, R3: TMyRecord;... R3:=R1+R2; в R3 складываются автоматом соответствуюшие поля записей R1 и R2? зобавно. щаз это все ручками надо делать, захекаешься. приходится писать классы, которые с этой мурой работают. морока |
|
#25 Юрий Федоров © 05.09.07 12:37:38
> #24 Паша © 05.09.07 10:13:41 > в R3 складываются автоматом соответствуюшие поля записей > R1 и R2? Нет. Ты можешь переопределить оператор "плюс" для каждого типа записей или классов если ты его не переопределил, то эта конструкция не скомпилируется. переопределяется так: TMyRecord = record X, Y: Float; class operator Add(const A, B: TMyRecord): TMyRecord; end; .... class operator Add(const A, B: TMyRecord): TMyRecord; begin Result.X:=A.X + B.X; Result.Y:=A.Y + B.Y; end; Вот список доступных операторов для переопределения: Implicit Explicit Negative Positive Inc Dec LogicalNot BitwiseNot Trunc Round Equal NotEqual GreaterThan GreaterThanOrEqual LessThan LessThanOrEqual Add Subtract Multiply Divide IntDivide Modulus LeftShift RightShift LogicalAnd LogicalOr LogicalXor BitwiseAnd BitwiseOr BitwiseXor |
|
#26 Mystic © 05.09.07 13:25:50
> при этом не плодятся наследники(обращение в коде идет к старому классу Наследник сделать не всегда возможно. Попробуй, например, сделать наследника для TStrings, все равно TListBox.Items не будут знать о твоем наследнике ничего. Но я не могу сказать, что это так уж сильно критично: синтаксический сахар. > Перегрузка операций Тоже не могу сказать, что это очень полезная вещь. Имхо, в большинстве случаев, где возникает такая потребность, проще реализовать свой скриптовый язык, гораздо более заточеный под предметную область |
|
#27 Юрий Федоров © 05.09.07 19:19:28
>#26 Mystic © > Но я не могу сказать, что это так уж сильно критично: синтаксический > сахар. Главное, на мой взгляд, тут в двух моментах - группировке схожих методов вместе и наименовании метода. А правильное определение имен очень важно. Если оформлять в виде отдельнойй процедуры, то в имени желательно будет упомянуть, к чему она собственно относится - к какому классу - ы виде префикса. или постфикса - что имхо снизит читабельность кода, и внесет некоторый элемент нелепицы > Тоже не могу сказать, что это очень полезная вещь. В некоторых случаях она полезна) Для сравнения записей, например (для сравнения классов, имхо, использовать очень опасно, приведет к ошибкам) |
Написать ответ |
|
