Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 721
  • Last Modified:

Proper Case routine

Hello,

Anyone out there have a string routine to convert names to proper case. My database has all customer names in upper case and I wnat to convert them to proper case.

Thanks,
Chad
0
dhertzfe
Asked:
dhertzfe
  • 6
  • 4
1 Solution
 
SteveWaiteCommented:
try this.
function ToProper(S: String): String;
var
  Delimiter: Boolean;
  I, L: Integer;
begin
  Delimiter := True;
  L := Length(S);
  for I := 1 to L
  do
    if not (S[I] in ['a'..'z', 'A'..'Z'])
      then Delimiter := True
      else
      if Delimiter then
      begin
        if S[I] in ['a'..'z']
          then S[I] := Chr(Ord(S[I]) - 32);
        Delimiter := False;
      end
      else
        if S[I] in ['A'..'Z']
        then S[I] := Chr(Ord(S[I]) + 32);
  Result := S;
end;

Regards,
Steve
0
 
dhertzfeAuthor Commented:
Steve,

THis is pretty good. It even handle O'Doole correctly. If you add Mc and Mac like McDonald and MacAuthur I'll raise the points another 100 and award them to you.

Thanks,
Chad
0
 
SteveWaiteCommented:
If you can wait, i've nearly done finished but got to go now. you hand it a TStrings with whatever 'de','la','mc','mac' etc. you need
so locking question till then.
back soon
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
rfedykCommented:
Hi Chad,

What Steve is proposing is good. However, I have a comment. I have built case converters for professional products and in every case the robustness of the solution can only be solved by incorporating an exception dictionary. You will be amazed at how people's names don't follow the rules.

Roger
0
 
SteveWaiteCommented:
i'm just testing... seems ok!
If you reject the proposed answer then and raise the points... :)

Steve
0
 
dhertzfeAuthor Commented:
Need to....Steve is sending his code and need to raise the points.

Chad
0
 
dhertzfeAuthor Commented:
Hi Roger,

Thanks for the heads up.....I will keep that in mind. Its an excellent idea.

Chad
0
 
SteveWaiteCommented:
I think this is as far as you can go with this method, as Roger correctly points out.
// Capitalise Names
// 'maclintock' = 'MacLintock' :)
// 'macclesfield' = 'MacClesfield' :(
function ToProperName(S: String): String;
const
  CaseDiff = 32;
  Crlf = #13#10;
  Names = 'mc' + Crlf + 'mac';
var
  Delimiter: Boolean;
  I, J, K, L, M: Integer;
  NamesList: TStringList;
begin
  NamesList := TStringList.Create;
  try
    NamesList.Text := Names;
    K := NamesList.Count - 1;
    L := Length(S);
    Delimiter := True;
    for I := 1 to L do
    begin
      if S[I] in ['a'..'z', 'A'..'Z'] then
      begin
        if Delimiter then
        begin
          if S[I] in ['a'..'z']
            then S[I] := Chr(Ord(S[I]) - CaseDiff);
          Delimiter := False;
        end
        else
        begin
          if S[I] in ['A'..'Z']
            then S[I] := Chr(Ord(S[I]) + CaseDiff);
          for J := 0 to K do
          begin
            M := Length(NamesList.Strings[J]);
            if (I = M) then
              if ToLowerCase(NamesList.Strings[J])
                = ToLowerCase(Copy(S, I - (M - 1), M)) then
              begin
                Delimiter := True;
                Break;
              end;
          end;
        end;
      end
      else Delimiter := True;
    end;
  finally
    NamesList.Free;
  end;
  Result := S;
end;


Regards,
Steve
0
 
SteveWaiteCommented:
need this too...
function ToLowerCase(S: String): String;
var
  I, L: Integer;
begin
  L := Length(S);
  for I := 1 to L
    do S[I] := Chr(Ord(S[I]) or $20);
  Result := S;
end;
0
 
dhertzfeAuthor Commented:
Thanks Steve,

Sorry for getting back so late...I guess I wear too many hats.

Thanks again,
Chad
0
 
SteveWaiteCommented:
Thanks Chad,

Glad to be of help.

 
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 6
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now