Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.06.29;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.049 c
15-1210249547
@!!ex
2008-05-08 16:25
2008.06.29
Подскажите игру?


2-1212169209
Katovski
2008-05-30 21:40
2008.06.29
стек


2-1212491944
ZENsan
2008-06-03 15:19
2008.06.29
Interface...


2-1212469766
кот
2008-06-03 09:09
2008.06.29
из Char в Integer


2-1212169529
VovKul
2008-05-30 21:45
2008.06.29
Как пользоватся консольными приложениями





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский