Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа со строками [D7, Win95/98, Win2k, WinXP]


wisekaa ©   (2004-06-10 15:51:00) 

Есть типизированный документ, со строками различной длины
Например
s1: string[10];
s2: string[20];
s3: string[15];

Строки должны быть обязательно этой длины, для сохранения размерности строки, они дополняються 0.

Хочеться написать универсальную функцию, дополнения 0.

Вопрос как передать в неё строки различноё длины, так чтобы в теле функции я знал какой длины строка пришла?


Anatoly Podgoretsky   (2004-06-10 17:12:00) [1]

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


GuAV   (2004-06-10 17:07:00) [2]


> Сам придумал?

ну да. я думал, что PChar(S) - это просто typecast, следовательно S[Length(S)+1] должно быть равно #0...
А оно значит не так :(


wisekaa   (2004-06-10 17:01:00) [3]

Всем спасибо предложенные вами варианты у меня как раз и реализованны, очень похоже на
[8] Anatoly Podgoretsky ©   (10.06.04 16:25)
FillMyString(S: {Short}String; Lg:Integer);
s1 := FillMyString(S1, SizeOf(S1)-1);

Выглядит : FillMyString(aStr: String; Ln:Integer): string;

Я хотел попробовать вытащить длину строки из передаваемого параметра,
для этого заменит тип string на что-то другое.

Понял что погоречился с этим.


stelius   (2004-06-10 16:29:00) [4]

Удалено модератором
Примечание: Дубль


stelius   (2004-06-10 16:28:00) [5]

2wisekaa
посмотри пост Тимохов ©   (10.06.04 15:54) [1]

> передавать указатель на строку и длину строки


Anatoly Podgoretsky   (2004-06-10 16:25:00) [6]

FillMyString(S: {Short}String; Lg:Integer);

s1 := FillMyString(S1, SizeOf(S1)-1);

Но стоит подумать об отказе от ShortString, вроде как бы не требуется


wisekaa   (2004-06-10 16:15:00) [7]

Уточняю вопрос:
Есть выходной файл, в котором строки должны быть фиксированной длины.
1 - 10 символов
2 - 15 символов
3 - 20 символов
Объявляем переменные
var
s1: string[10];
s2: string[15];
s3: string[20];
begin
... Получаем значения ...
s1 := '12345';
... Нужно что бы выглядела так '0000012345'
... делаем через функцию ...
s1 := FillMyString( ??s1?? );
end;

function FillMyString(Параметр - какой?): string;
begin
result := stringofchar('0',sizeof(Параметр)-length(Параметр))+Параметр;
end;

Так можно реализовать или это в принципе не возможно.
Я пока склоняюсь в сторону второго.


Sandman25   (2004-06-10 15:59:00) [8]

Чтобы "дополнить", нужно будет убрать пробелы в конце и добавить нули в начале. Можно это сделать в лоб, а можно и через MoveMemory


Anatoly Podgoretsky   (2004-06-10 15:59:00) [9]

GuAV ©   (10.06.04 15:58) [4]
Сам придумал?


GuAV   (2004-06-10 15:58:00) [10]

юзай не string[x] а просто string и в конце будет 0 автоматом.


Anatoly Podgoretsky   (2004-06-10 15:57:00) [11]

Length даст ответ на твой вопрос.
Дополнять ничего не требуется все автоматомю


Sandman25   (2004-06-10 15:57:00) [12]

Никак. В строке нигде не записывается ее максимальная длина.


Тимохов   (2004-06-10 15:54:00) [13]


>
> Вопрос как передать в неё строки различноё длины, так чтобы
> в теле функции я знал какой длины строка пришла?

передавать указатель на строку и длину строки

Что значит "дополняются 0"?


Наверх

Титульная страница Поиск, карта сайта Написать письмо