Главная страница
    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.47 MB
Время: 0.037 c
1-1086886557
Ivolg
2004-06-10 20:55
2004.06.27
Копирование


14-1086907355
ИМХО
2004-06-11 02:42
2004.06.27
"Тихий Дон" Шолохова и одноименный фильм


8-1081487287
HydraMarat
2004-04-09 09:08
2004.06.27
Сглаживание иконок а-ля WinXP


1-1087015145
mmb
2004-06-12 08:39
2004.06.27
Как получить строки из DLL при вызове функции?


3-1085906835
Jet
2004-05-30 12:47
2004.06.27
Нужна помощь по Filter.





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