13

文字列の40文字しか使用できないデータベース列があります。したがって、文字列の長さが40文字を超えると、エラーが発生します。文字列をデルファイで40文字にカット/トリミングするにはどうすればよいですか?

4

4 に答える 4

23
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'

文字列が切り捨てられた場合に省略記号を追加して、これをより明確に示すことをお勧めします。

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 ...'

または、すべてのUnicode愛好家のために、単一の省略記号文字を使用して、さらに2つの元の文字を保持できます…(U + 2026:HORIZONTAL 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…'

しかし、その場合は、すべてのユーザーとその親戚がこの珍しいキャラクターをサポートしていることを確信している必要があります。

于 2013-02-18T12:27:39.110 に答える
18

あなたはSetLengthこの仕事に使うことができます:

SetLength(s, Min(Length(s), 40));
于 2013-02-18T12:31:16.873 に答える
14
var s : string;
begin   
   s := 'your string with more than 40 characters...';
   s := LeftStr(s, 40);
于 2013-02-18T12:29:45.727 に答える
0

Javaのこのソリューションに触発されて、私のソリューションは次のようなものでした(非常に長い可能性のあるパスを短くします)

   const
      maxlen = 77;   // found this by entering sample text

  begin
     headlineTemp := ExtractFileName(main.DatabaseFileName);
     if length(main.DatabaseFileName) > maxlen then
      begin
        pnlDBNavn.Caption :=
             MidStr(
                  main.DatabaseFileName, 1,
                           maxlen -3 - length(headlinetemp)
                ) + '...\' + headlineTemp;
      end
     else
         // name is shorter, so just display it
         pnlDBNavn.Caption := main.DatabaseFileName;
   end;
于 2021-01-14T19:25:24.543 に答える