![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа со строками [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"?