Форум: "Основная";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];
ВнизРабота со строками Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.041 c