Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.48 MB
Время: 0.03 c
14-1086697699
Baks
2004-06-08 16:28
2004.06.27
Вопрос на зацепку


14-1086783113
Юрий
2004-06-09 16:11
2004.06.27
??? Выбор языка программирования ???


3-1086158991
3APA3A
2004-06-02 10:49
2004.06.27
Как прибавить (отнять) время или дату у поля типа timestamp


3-1086286568
hardclubber
2004-06-03 22:16
2004.06.27
Автоинкримент в IB


14-1086433773
Iraizor
2004-06-05 15:09
2004.06.27
Млин, подскажите сайт





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский