![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
valerchi |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 27.5.2008 Где: Геническ Репутация: нет Всего: нет |
Помогите, всё обшарил, никак не могу найти решение на вроде бы простой вопрос. Мне нужно заменить символ в определённой ячейке.
Так выдаёт ошибку ([Error] Unit1.pas(185): Incompatible types: 'Char' and 'String').
|
|||
|
||||
Vas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 29.6.2005 Где: Stavropol region Репутация: нет Всего: 28 |
Так в вашем примере
a[i] - char inttostr(strtoint(b)+c) - string А чем StringReplace не устраивает? -------------------- И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин) |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
valerchi, IntToStr вернет string, т.е. строку (возможно в несколько символов). a[i] вернет Char, т.е. один символ. Ты своим кодом пытаешься присвоить в один символ целую строку. Даже если изловчится и преобразовать string в char, то что должно произойти, если с будет больше 10? Как ты сможешь в один символ спихнуть двузначное число? Трехзначное? У тебя ошибка изначально в проектировании. Лучше напиши на каком-нибудь примере с многозначными числами что должно получиться, а мы тебе подскажем как это сделать. Хотя бы расскажи что должно быть к примеру при a = 'Hello World', b = '8', c = 5 и i = 2.
По всей видимости тем, что заменить символ надо не "где-то там в строке", а на конкретной позиции. -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: нет Всего: 28 |
Если получится число от 0 до 9, проблемы тут нет совершенно. В таком случае можно сделать примерно так:
Для наглядности я взял Только b := '3', потому что при b = '8' таки да, проблема появится ![]() Это сообщение отредактировал(а) Pawl - 18.2.2014, 00:07 -------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
valerchi |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 27.5.2008 Где: Геническ Репутация: нет Всего: нет |
Спасибо, я понял. У меня может такое получиться, что в один символ нужно будет "запихнуть" двузначное число. Значит, получается, что этот принцип не работает. А как же тогда сделать? Вместо переменной string брать массив string? |
||||
|
|||||
Pawl |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: нет Всего: 28 |
Можно сделать так:
-------------------- В действительности всё совсем не так, как на самом деле |
||||
|
|||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
Я еще раз повторюсь, расскажи на конкретном примере что именно требуется при многозначных значениях. Потому как не совсем понятно каким образом нужно менять исходную строку. Можно заменять один символ двумя, "раздвигая" при этом исходную строку (так предложил Pawl), а можно заменять два символа исходной строки, тогда ее размерность не поменяется. -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
valerchi |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 27.5.2008 Где: Геническ Репутация: нет Всего: нет |
В тмм то всё и дело, что нужно не раздвинуть строку и вставить, а именно заменить. А код такой
Загвоздка в том, что a[i-1] или a[i-2] могут быть от 0 до 9 и в сумме может получиться двузначное число. |
||||||
|
|||||||
Pawl |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: нет Всего: 28 |
Вот блин, инфу надо из вас клещами вытаскивать! То вы говорите про 1 символ:
А теперь уже речь идет о нескольких!
Напоминает известную фразу: "хозяйка, дай попить, а то так есть хочется, что аж переночевать негде!" ![]() Но к делу. Вы писали
В коде у вас также заменяется один символ. Если не запихивать несколько символов в 1, а в каждый символ по 1-му, в зависимости от величины strtoint(a[i-1])+h, то можно сделать так (минимально переделав мой код выше):
И, пожалуйста, в следующий раз внятно формулируйте ТЗ! Кстати, вот ссылка по работе со строками. Может вам пригодиться Это сообщение отредактировал(а) Pawl - 19.2.2014, 17:17 -------------------- В действительности всё совсем не так, как на самом деле |
||||||
|
|||||||
valerchi |
|
||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 27.5.2008 Где: Геническ Репутация: нет Всего: нет |
Спасибо, но это чуть не то, что мне нужно. Нужно так, чтобы в ячейке было, например двузначное число, скажем, 22, а не 2 и 2. Наверное, для этой цели мне лучше подойдёт массив. Я бы и раньше пользовался массивами, но строками удобнее (можно присвоить всё значение строки в другую переменную (a:=a+b;)). А так нужно запускать цикл, чтобы вывести все значения массива в переменную. |
||||||||
|
|||||||||
Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: нет Всего: 28 |
А какая разница? Можно выделить эти 2 и 2 из строки, сделать strtoint и будет вам 22 ![]() P. S. Вы вообще мой код запускали? На входе у меня строка а = '9376'; s = inttostr(strtoint(b) + c) = 14. Таким образом, на выходе будет а = '9146'. Это то, что вы хотите получить? Если нет, поясните, что должно быть на конкретном примере. Это сообщение отредактировал(а) Pawl - 19.2.2014, 22:23 -------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
valerchi |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 27.5.2008 Где: Геническ Репутация: нет Всего: нет |
Спасибо, код интересно придуман, но дело в том, что это всё усложняет, потому, что: 1.цифры в ячейках которые удаляются, тоже будут прибавляться (заменяться) (они все должны пройти изменения) 2.неизвестно на каком цикле, сколько ячеек нужно выделить (если число больше 10 то 2 ячейки, а если нет, то 1). Так мы имеем одну ячейку с определённой цифрой (двухзначной или однозначной).... Вот как я решил сделать. Может что-то можно упростить? Посоветуйте.
|
|||
|
||||
Агрох |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 176 Регистрация: 6.4.2013 Где: Москва Репутация: 1 Всего: 6 |
Прочитал тему немного поверхностно, но всё же выскажу предположение. Человеку надо запомнить массив чисел (не цифр) и он решил что проще будет сделать это через сохранение их в строку. Но тогда вопрос, массив каких чисел вот это: "9238"? 9, 2, 3 и 8? 92, 3 и 8? 9, 23 и 8? 92 и 38?
Варианта три. Либо использовать всё таки нормальный массив. Либо ставить между числами разделители, например "9|23|8" (да да, это было всё таки 9, 23 и 8). Либо использовать N-значную систему исчисления, по аналогии с шестнадцатиричной, где 10 = A, 11 = B и т.д., т.е. такую, где даже двузначное число есть один символ. А вообще да, нужно описание самой задачи, а не выбранного метода её решения. --------------------
Putin here, Putin there, Putin almost everywhere! |
|||
|
||||
Pawl |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: нет Всего: 28 |
Согласен.
вот сейчас вообще не понял...
Для того, чтобы что-то посоветовать, надо понять, что вам надо. Приведите лучше свой код полностью, чтобы его можно было запустить, с тем, что должно быть на входе и что вы хотите получить на выходе. Если код слишком велик, локализуйте проблему в рабочем примере. Это сообщение отредактировал(а) Pawl - 20.2.2014, 13:28 -------------------- В действительности всё совсем не так, как на самом деле |
||||||
|
|||||||
valerchi |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 27.5.2008 Где: Геническ Репутация: нет Всего: нет |
"Но тогда вопрос, массив каких чисел вот это: "9238"? 9, 2, 3 и 8? 92, 3 и 8? 9, 23 и 8? 92 и 38?"... Хороший вопрос. Мне нужен массив чисел 9, 2, 3, которые можно будет заменить на 99 22 33. Наверное лучше "использовать всё таки нормальный массив", но идея "использовать N-значную систему исчисления, по аналогии с шестнадцатиричной, где 10 = A, 11 = B и т.д" очень интересная, но опять же переводить в одну систему, потом в другую... Не хочется "заморачиваться". Я остановлюсь на массивах. Большое спасибо всем за разъяснение. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |