![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Строковые функции [D6, XP]
n_sch © (2008-06-04 12:01:00)Добрый день! Уважаемые мастера, помогите разобраться со строками есть текстовый файл примерно с таким содержанием (только гораздо больше):
18000 42306810840376102057 ХОРЕВА ЗИНАИДА МИХАЙЛОВНА
1539990 42306810840376103067 Иванов ПЕТР ВАСИЛЬЕВИЧ
надо вместо пробелов вставить символ '|' , мои жалкие попытки типа:
var
z,y:integer;
stroka:string;
begin
y:=Pos((stroka),Char(' '));
for z:=y to Length(stroka) do begin
if stroka[z]=' ' then begin
insert('|',stroka,z);
ни к чему хорошему не приводят.... Подскажите пожалуйста, как вообще можно в этом случае использовать Pos и Insert и если можно хоть какой нибудь кусок кода, а то в Делфевом хелпе ну уж совсем какой то простой пример про Insert.
Заранее спасибо!
n_sch (2008-06-04 17:46:00) [1]Спасибо !!!
Ultimate (2008-06-04 17:46:00) [2]Сначала изучи паскаль) Потом за делфи берись... Я паскаль уже изучил... терь делфи изучаю... Наааамного проще... например посети http://паскал.гути.ру/
Palladin (2008-06-04 17:43:00) [3]
> n_sch (04.06.08 17:42) [21]
и чего же ты хотел, так и будет ругаться, заведи временную переменную s, сначала присвой ей Edit1.Text, потом вставь в нее Insert, а потом обратно присвой Edit1.Text переменную s
n_sch (2008-06-04 17:42:00) [4]Insert('.',Edit5.Text,Length(Edit5.Text)-2);
Palladin (2008-06-04 17:41:00) [5]при условии что
var
sroka:String;
это невозможно
приведи полный достоверный код сюда
Плохиш (2008-06-04 17:40:00) [6]
> n_sch (04.06.08 17:38) [18]
И что в сообщении об ошибке не понятно?
Зделай stroka не константой...
n_sch (2008-06-04 17:38:00) [7]Insert('.',stroka,Length(stroka)-2);
[Error] sbrf.pas(243): Constant object cannot be passed as var parameter
Вот это.....
Плохиш (2008-06-04 17:37:00) [8]
> n_sch (04.06.08 17:30) [15]
Ну вот зачем ты, лох, лезешь в программирование, тут даже конференции для тебя нет?
Palladin (2008-06-04 17:33:00) [9]тебе справку перевести? чего там может быть непонятного? перевожу на русский:
procedure Insert(Source: string; var S: string; Index: Integer);
процедура Вставить(Источник:Строка;ПоСсылке С:Строка; Индекс:ЦелоеЧисло);
что именно не понятно?
n_sch (2008-06-04 17:30:00) [10]Да ребята, если честно этот раздел надо было назвать не НАЧИНАЮЩИМ а ДЛЯ ЛОХОВ, Insert + F1-я и сам прочитать могу, только уже говорил ранее что там пример про INSERT ни какой, вы бы лучше строчку нормального кода дали, для таких как я...или указали где я не правильно что написал в процедурке.
Тын-Дын (2008-06-04 16:40:00) [11]
> n_sch (04.06.08 16:36) [12]
> поставить '.' (точку) перед двумя последними знаками
А вот здесь как раз воспользуйся функцией Insert().
Palladin (2008-06-04 16:39:00) [12]Insert + F1, выбрать где procedure
n_sch (2008-06-04 16:36:00) [13]Спасибо за "божественное чудо" в виде заключения значения в квадратные скобки.
Еще вопрос, как в строкe ну например вида '1230569027' поставить '.' (точку) перед двумя последними знаками и получив '12305690.27 ' сохранить в строковую переменную, я пробовал так:
var
x,y:integer;
cifra,cifra1,stroka:string;
begin
SetLength(cifra,Length(stroka));
SetLength(cifra1,Length(stroka));
for x:=1 to (Length(stroka)-2) do begin
cifra[x]:=stroka[x];
end;
for y:=x to x+2 do begin
cifra1[y]:=stroka[y];
end;
Edit1.Text:=cifra+'.'+cifra1;
не получилось...Зарание спасибо!
Palladin (2008-06-04 13:38:00) [14]Ну если про множества там написано и под рукой ничего более серьезного нет - то, как ни крути, придется. Хотя в данном случае, думаю, аффтара удовлетворит "божественное чудо" в виде заключения значения в квадратные скобки. Он это примет как данное, как закон божий, не заморачиваясь, что это может значить. :)
Плохиш (2008-06-04 13:25:00) [15]
> Palladin © (04.06.08 13:23) [9]
т.е. им всё-таки придётся прочитать брошурку "Делфи за 21 секунду для полных идиотов"? :-)
Palladin (2008-06-04 13:23:00) [16]В справке неоднозначно написано, что людям, понятия не имеющим о множествах, пользоваться функцией StringReplace противопоказанно в связи с опасностью узнать, что же такое множества.
Плохиш (2008-06-04 13:21:00) [17]
> n_sch (04.06.08 13:17) [7]
> Еще вопрос если вас не затруднит, а собственно, что за флаги
> прсит функция StringReplace, я ей подкладываю rfReplaceAll,
> а она мне в ответ:
> [Error] Incompatible types: 'TReplaceFlags' and 'Enumeration'
> ??????
А в справке что написано?
n_sch (2008-06-04 13:17:00) [18]
> Что мешает сначала сохранить в другую переменную, а потом
> поменять.
> Не, ну если очень хочется
>
> S_out : string;
>
> SetLength(S_out, Length(Stroka));
> for z := 1 to Length(Stroka) do
> if Stroka[z] = ' ' then S_out[z] := '|' else S_out[z] :
> = Stroka[z];
Спасибо, кажеться понял....
Еще вопрос если вас не затруднит, а собственно, что за флаги прсит функция StringReplace, я ей подкладываю rfReplaceAll, а она мне в ответ:
[Error] Incompatible types: 'TReplaceFlags' and 'Enumeration' ??????
Рамиль (2008-06-04 12:31:00) [19]Что мешает сначала сохранить в другую переменную, а потом поменять.
Не, ну если очень хочется
S_out : string;
SetLength(S_out, Length(Stroka));
for z := 1 to Length(Stroka) do
if Stroka[z] = ' ' then S_out[z] := '|' else S_out[z] := Stroka[z];
Рамиль (2008-06-04 12:29:00) [20]Э... А оператор присваивания ( := ) не пробовали?