Results 1 to 9 of 9

Thread: UpCase eerste karakter van een string

  1. #1

    UpCase eerste karakter van een string

    Hallo,

    Ik zit met het volgende probleem:

    AStr := 'aaaaaa';
    Result := UpCase(AStr[1]);

    Ik verwacht dat Result := 'Aaaaaa' is maar ik krijg alleen maar een 'A' te zien en niet de rest van de string.

    Hoe los ik dat op?

    H.G. Frans

  2. #2
    AStr[1] := Upcase(AStr[1]);
    Result := AStr;

    Controleer ook of je string niet leeg is, want dit is een potentiële AV.
    Last edited by PSterk; 20-Sep-14 at 20:59.

  3. #3
    De string is niet leeg maar ik zal het wel testen. Het simpelste is er een spatie achter te zetten.
    Ik zie nu wat ik vergeten was. Het moet inderdaat zijn AStr[1] := ....

    Bedankt, Frans

  4. #4
    Werkt (in Lazarus) natuurlijk alleen als 1e karakter lower ASCII is (LCL is UTF-8).

    Bart

  5. #5
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    Persoonlijk ga ik voor een nettere oplossing.

    Peter

    Delphi Code:
    1. { TForm1 }
    2.   Function MaakUpcase(Regel: String): String;
    3. Begin
    4.   Result := UpperCase(Copy(Regel, 1, 1)) + LowerCase(Copy(Regel, 2, Length(Regel)-1));
    5. End;
    6.  
    7. procedure TForm1.FormCreate(Sender: TObject);
    8. begin
    9.    Label1.Caption := MaakUpcase('testregel');
    10. end;
    11.  
    12. end.
    10.4.2, Delphi2010, of Lazarus 2.2.0

  6. #6
    Probeer dit eens (in een LCL application):
    Delphi Code:
    1. MaakUpcase('óóh wat mooi');

    Bart

  7. #7
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    Uppercase heeft zijn beperkingen

    Description

    UpperCase returns the uppercase equivalent of S. Ansi characters are not taken into account, only ASCII codes below 127 are converted.
    It is completely equivalent to the UpCase function of the system unit, and is provided for compatiibility only.




    Deze werkt

    Delphi Code:
    1. Function MaakUpcase(Regel: String): String;
    2. Begin
    3.   Result := AnsiUpperCase(Copy(Regel, 1, 1)) + AnsiLowerCase(Copy(Regel, 2, Length(Regel)-1));
    4. End;
    5.  
    6. Function UTF8UpperFirst(Value:UTF8String):UTF8String;
    7. var temp:WideString;
    8. begin
    9.   temp:=UTF8Decode(Value);
    10.   if length(temp) > 0 then temp[1]:=WideUpperCase(temp[1])[1];
    11.   Result:=UTF8Encode(temp);
    12. end;
    13.  
    14. Procedure TForm1.FormCreate(Sender: TObject);
    15. begin
    16.    Label1.Caption := MaakUpcase('óóh wat mooi');
    17.    label2.Caption := UTF8UpperFirst('óóó Wat mooi');
    18. end;

    Gr. Peter
    Last edited by Wok; 21-Sep-14 at 14:11.
    10.4.2, Delphi2010, of Lazarus 2.2.0

  8. #8
    Quote Originally Posted by Wok View Post
    Function UTF8UpperFirst(Value:UTF8String):UTF8String;
    var temp:WideString;
    begin
    temp:=UTF8Decode(Value);
    if length(temp) > 0 then temp[1]:=WideUpperCase(temp[1])[1];
    Result:=UTF8Encode(temp);
    end;
    Untested code:
    Delphi Code:
    1. Uses LazUtf8;
    2.  
    3. Function MaakEersteUpcaseUtf8(Regel: String): String;
    4. Begin
    5.   Result := Utf8UpperCase(Utf8Copy(Regel, 1, 1)) + Utf8LowerCase(Utf8Copy(Regel, 2, Utf8Length(Regel)-1));
    6. End;

    Bart

  9. #9
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    UTF, Unicode & alle aanverwanten blijf ik lastig vinden.

    Bart, Je oplossing is mooier dan mijn eerste :-)
    De Utf oplossing kwam ik tegen op lazarus forum, en die werkt ook.
    Maar door een string netjes te splitsen zoals ik het voorbeeld krijg je een betrouwbaar resultaat.

    :-)

    Peter
    10.4.2, Delphi2010, of Lazarus 2.2.0

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •