Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.29;
Скачать: CL | DM;

Вниз

Строковые функции   Найти похожие ветки 

 
n_sch   (2008-06-04 12:01) [0]

Добрый день! Уважаемые мастера, помогите разобраться со строками есть текстовый файл примерно с таким содержанием (только гораздо больше):
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.
Заранее спасибо!


 
Ega23 ©   (2008-06-04 12:04) [1]

StringReplace + F1


 
Рамиль ©   (2008-06-04 12:08) [2]

Если пробел один и надо заменить на один | то зачем какие то pos insert?
А StringReplace работает очень медленно.

for z := 1 to Length(Stroka) do
 if Stroka[z] = " " then Stroka[z] := "|";


 
Рамиль ©   (2008-06-04 12:10) [3]

А если так хочется воспользоваться именно Insert, то еще надо сделать Delete.
> а то в Делфевом хелпе ну уж совсем какой то простой пример
> про Insert.

А как там сложный пример сделать? Там и примера никакого не надо.


 
n_sch   (2008-06-04 12:25) [4]


> Если пробел один и надо заменить на один | то зачем какие
> то pos insert?
> А StringReplace работает очень медленно.
>
> for z := 1 to Length(Stroka) do
>  if Stroka[z] = " " then Stroka[z] := "|";

С этим в принципе все ястно, я примерно так и начинал, я вхожу в "ступор" когда из исходной строки с пробелами надо сохранить строку с "|" в какую нибудь переменную, если можно подскажите......


 
Рамиль ©   (2008-06-04 12:29) [5]

Э... А оператор присваивания ( := ) не пробовали?


 
Рамиль ©   (2008-06-04 12:31) [6]

Что мешает сначала сохранить в другую переменную, а потом поменять.
Не, ну если очень хочется

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];


 
n_sch   (2008-06-04 13:17) [7]


> Что мешает сначала сохранить в другую переменную, а потом
> поменять.
> Не, ну если очень хочется
>
> 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 13:21) [8]


> n_sch   (04.06.08 13:17) [7]


> Еще вопрос если вас не затруднит, а собственно, что за флаги
> прсит функция StringReplace, я ей подкладываю rfReplaceAll,
>  а она мне в ответ:
> [Error]  Incompatible types: "TReplaceFlags" and "Enumeration"
> ??????

А в справке что написано?


 
Palladin ©   (2008-06-04 13:23) [9]

В справке неоднозначно написано, что людям, понятия не имеющим о множествах, пользоваться функцией StringReplace противопоказанно в связи с опасностью узнать, что же такое множества.


 
Плохиш ©   (2008-06-04 13:25) [10]


> Palladin ©   (04.06.08 13:23) [9]

т.е. им всё-таки придётся прочитать брошурку "Делфи за 21 секунду для полных идиотов"? :-)


 
Palladin ©   (2008-06-04 13:38) [11]

Ну если про множества там написано и под рукой ничего более серьезного нет - то, как ни крути, придется. Хотя в данном случае, думаю, аффтара удовлетворит "божественное чудо" в виде заключения значения в квадратные скобки. Он это примет как данное, как закон божий, не заморачиваясь, что это может значить. :)


 
n_sch   (2008-06-04 16:36) [12]

Спасибо за "божественное чудо" в виде заключения значения в квадратные скобки.
Еще вопрос, как в строк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 16:39) [13]

Insert + F1, выбрать где procedure


 
Тын-Дын   (2008-06-04 16:40) [14]


> n_sch   (04.06.08 16:36) [12]


> поставить "." (точку) перед двумя последними знаками


А вот здесь как раз воспользуйся функцией Insert().


 
n_sch   (2008-06-04 17:30) [15]

Да ребята, если честно этот раздел надо было назвать не НАЧИНАЮЩИМ а ДЛЯ ЛОХОВ, Insert + F1-я и сам прочитать могу, только уже говорил ранее что там пример про INSERT ни какой, вы бы лучше строчку нормального кода дали, для таких как я...или указали где я не правильно что написал в процедурке.


 
Palladin ©   (2008-06-04 17:33) [16]

тебе справку перевести? чего там может быть непонятного? перевожу на русский:

procedure Insert(Source: string; var S: string; Index: Integer);

процедура Вставить(Источник:Строка;ПоСсылке С:Строка; Индекс:ЦелоеЧисло);

что именно не понятно?


 
Плохиш ©   (2008-06-04 17:37) [17]


> n_sch   (04.06.08 17:30) [15]

Ну вот зачем ты, лох, лезешь в программирование, тут даже конференции для тебя нет?


 
n_sch   (2008-06-04 17:38) [18]

Insert(".",stroka,Length(stroka)-2);

[Error] sbrf.pas(243): Constant object cannot be passed as var parameter

Вот это.....


 
Плохиш ©   (2008-06-04 17:40) [19]


> n_sch   (04.06.08 17:38) [18]

И что в сообщении об ошибке не понятно?
Зделай stroka не константой...


 
Palladin ©   (2008-06-04 17:41) [20]

при условии что
var
sroka:String;

это невозможно

приведи полный достоверный код сюда


 
n_sch   (2008-06-04 17:42) [21]

Insert(".",Edit5.Text,Length(Edit5.Text)-2);


 
Palladin ©   (2008-06-04 17:43) [22]


> n_sch   (04.06.08 17:42) [21]

и чего же ты хотел, так и будет ругаться, заведи временную переменную s, сначала присвой ей Edit1.Text, потом вставь в нее Insert, а потом обратно присвой Edit1.Text переменную s


 
Ultimate ©   (2008-06-04 17:46) [23]

Сначала изучи паскаль) Потом за делфи берись... Я паскаль уже изучил... терь делфи изучаю... Наааамного проще... например посети http://паскал.гути.ру/


 
n_sch   (2008-06-04 17:46) [24]

Спасибо !!!



Страницы: 1 вся ветка

Текущий архив: 2008.06.29;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.024 c
2-1212308588
leonidus
2008-06-01 12:23
2008.06.29
Как определить что мое окно наверху?


15-1210823680
Slider007
2008-05-15 07:54
2008.06.29
С днем рождения ! 15 мая 2008 четверг


15-1211205462
Ломброзо
2008-05-19 17:57
2008.06.29
Как крякнуть IE


2-1212221404
Pi:=3.14...
2008-05-31 12:10
2008.06.29
Пример ключа в реестр


15-1211107449
@!!ex
2008-05-18 14:44
2008.06.29
Подсветка синтаксиса в MSVS 7.1 C++