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

Вниз

Работа со строками   Найти похожие ветки 

 
wisekaa ©   (2004-06-10 15:51) [0]

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

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

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

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


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


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

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

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


 
Anatoly Podgoretsky ©   (2004-06-10 15:57) [2]

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


 
Sandman25 ©   (2004-06-10 15:57) [3]

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


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

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


 
Sandman25 ©   (2004-06-10 15:59) [5]

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


 
Anatoly Podgoretsky ©   (2004-06-10 15:59) [6]

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


 
wisekaa ©   (2004-06-10 16:15) [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;

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


 
Anatoly Podgoretsky ©   (2004-06-10 16:25) [8]

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

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

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


 
stelius ©   (2004-06-10 16:28) [9]

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

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


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

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


 
wisekaa ©   (2004-06-10 17:01) [11]

Всем спасибо предложенные вами варианты у меня как раз и реализованны, очень похоже на
[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 на что-то другое.

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


 
GuAV ©   (2004-06-10 17:07) [12]


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

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


 
Anatoly Podgoretsky ©   (2004-06-10 17:12) [13]

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



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

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

Наверх




Память: 0.49 MB
Время: 0.024 c
14-1086001167
TriX
2004-05-31 14:59
2004.06.27
Что с кладовкой случилось ?не че не скачивается


3-1085976764
Yad
2004-05-31 08:12
2004.06.27
Размер лога MS SQL


3-1086245573
din
2004-06-03 10:52
2004.06.27
Какая функция подсчитывает количество лет DateDiff не проходит


4-1084938534
HellWaiter
2004-05-19 07:48
2004.06.27
Список дисков


3-1086162806
inkotex
2004-06-02 11:53
2004.06.27
Подключение к базе через сеть