Bir dizenin yalnızca 40 karakterini alabilen bir veritabanı sütunum var. Dize uzunluğu 40 karakterden büyük olduğunda, bana hata veriyor. Delphi'de dizeyi 40 karaktere nasıl kesip/kesebilirim?Delphi'de istenen bir sayıya dize nasıl kesilir?
cevap
var
s: string;
begin
s := 'This is a string containing a lot of characters.'
s := Copy(s, 1, 40);
// Now s is 'This is a string containing a lot of cha'
Daha fantezi bir dize kesilirse, üç nokta eklemek olacaktır bu daha net göstermek için:
function StrMaxLen(const S: string; MaxLen: integer): string;
var
i: Integer;
begin
result := S;
if Length(result) <= MaxLen then Exit;
SetLength(result, MaxLen);
for i := MaxLen downto MaxLen - 2 do
result[i] := '.';
end;
var
s: string;
begin
s := 'This is a string containing a lot of characters.'
s := StrMaxLen(S, 40)
// Now s is 'This is a string containing a lot of ...'
Veya, tüm Unicode severler için, kullandığınız fazla iki kez daha özgün karakterleri tutabilir tek üç nokta karakteri ... (U + 2026: YATAY eLLIPSIS):
function StrMaxLen(const S: string; MaxLen: integer): string;
var
i: Integer;
begin
result := S;
if Length(result) <= MaxLen then Exit;
SetLength(result, MaxLen);
result[MaxLen] := '…';
end;
var
s: string;
begin
s := 'This is a string containing a lot of characters.'
s := StrMaxLen(S, 40)
// Now s is 'This is a string containing a lot of ch…'
Ama sonra tüm kullanıcılar ve yakınları bu nadir karakteri destekleyen pozitif olmalıdır. Bu iş için
Bunun için uygun elips karakterini kullanmanızı öneririm, böylece dizeye iki ek karakter daha eklenir. – mj2008
@ mj2008: Bu seçeneği ekledi. –
karakteri de ANSI karakter kümelerinde hex 85'dir (yıllarca Delphi'de kullandım). Açıkçası, onu kullanan herkes, kod sayfasında veya her neyse geçerli olduğundan emin olmalıdır. – mj2008
var s : string;
begin
s := 'your string with more than 40 characters...';
s := LeftStr(s, 40);
"StrUtils" için bu. –
Evet, tabiki haklısın. StrUtils'i eklemelisin. –
Merak ediyorum, bu 'SetLength' veya 'Copy' yaklaşımından daha mı hızlı? – Wodzu
kullanabilirsiniz SetLength
:
SetLength(s, Min(Length(s), 40));
Sadece bunu ekledim. (Yanıtınızı gördüğümde unaddediniz.) –
Çok uzun dizelerle (birçok MB) veya çok fazla dizeyle (saniyede binlerce) çalışıyorsanız, bu en iyi yaklaşımdır. –
Bu, en iyi yaklaşım performansı ve kodlama bilimi olduğunu düşünüyorum. –
- 1. Mariadb nasıl incelikle kesilir?
- 2. PHP: Dizim nasıl kesilir?
- 3. Bir python concurrent.futures içinde time.sleep() nasıl kesilir
- 4. Scala'da asenkron hesaplamalar nasıl kesilir?
- 5. XHTML’yi keyfi bir sayıya nasıl ayırabilirdiniz?
- 6. javascript bir sayıya dönüştürün arabellek
- 7. R'de tam sayıya nasıl yuvarlanır?
- 8. while döngüsündeki bir koşuldan bir süre döngü nasıl kesilir?
- 9. Küçük bir UIImages içine büyük bir hareketli png nasıl kesilir?
- 10. "İstenen ad geçerli olmakla birlikte, istenen türde veri bulunamadı" SharpSsh
- 11. R'de varclus ile dendrogram nasıl kesilir?
- 12. Bekleme C++ 0x iş parçacığı nasıl kesilir?
- 13. Sistem çağrıları ne zaman ve nasıl kesilir?
- 14. Scala salınımında pencere kapatma mekanizması nasıl kesilir?
- 15. SKSpriteNodes içinde rastgele delikler nasıl kesilir
- 16. Android :: Kablosuz ağ bağlantısı nasıl kesilir?
- 17. Fotoğraf makinesi rulosundaki kareler nasıl kesilir?
- 18. Dize içindeki son iki harfi nasıl keser ve Oracle'da sayıya nasıl dönüştürülür?
- 19. Bir çiftin en yakın tam sayıya yuvarlanması
- 20. Sayı dizisini ikili bir sayıya dönüştürme
- 21. "G" gibi bir dize 50 gibi belirli bir sayıya eşitlemek mümkün mü?
- 22. recv işlevi bekleyen bir iş parçacığı nasıl kesilir?
- 23. Yeni bir web sayfasını açarken ajax isteği nasıl kesilir?
- 24. Javascript ile bir resim/HTML kanvasının yarısı nasıl kesilir?
- 25. Erişim "İstenen veri yükü"?
- 26. Varchar'dan sayıya sahip bir sütunun türünü int
- 27. Her zaman eşit bir sayıya sahip GUID
- 28. İmzasız int, 8 basamaklı onaltılık sayıya nasıl biçimlendirilir?
- 29. javascript - en yakın tam sayıya
- 30. Python ve viceversa'da bir karakteri tam sayıya nasıl dönüştürebilirim?
burada gerçekten alakalı DB sütun uzunluğu hakkında bir parçası mı? çünkü eğer burada birkaç yaklaşımınız varsa, örneğin alanın ayarlanması dizgeyi kırpacak ya da sorguda bir CAST/diğer SQL string fonksiyonlarını kullanacaktır ... (Bu durumda DB tasarımımı nasıl geliştireceğimi düşünürdüm). – kobik