1 character in all words in givenname should be capitalised.

I have a small task that I hope you guys can help me with.

I have a CSV file in the format of:

GivenName,Surname,Init,Dep,Title

Sometimes givenname is 2 names and the lastname is just 1.

I have done this (see code), but it is tease me.

If there is 1 givenname it is ok, but if there 2 givennames both names are all small.

Hope you can help me.

procedure TFrmMain.Button7Click(Sender: TObject);
var strListOrg, strLineList : TStringlist; I : integer; adComp : IADsContainer;  adUser : IADsUser;  tmp, givenname, lastname : string;
begin
  opendialog1.Filter := 'Comma Delimited (*.csv)|*.CSV';
  if opendialog1.Execute then
  begin
    if opendialog1.FileName <> '' then
    begin
      strListOrg := TStringlist.Create;
      strListOrg.LoadFromFile(OpenDialog1.FileName);
      try
        ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Text := 'SELECT sAMAccountName, mail FROM '+ Quotedstr('LDAP://OU=USERS,' + edit2.Text) + ' WHERE objectClass='+ Quotedstr('user') + ' ORDER by CN';
        ADOQuery1.Open;
        try
          for I := 0 to strListOrg.Count - 1 do
          begin
            strLineList := TStringList.Create;
            strLineList.Delimiter := ';';
            try
              strLineList.DelimitedText := stringreplace(strListOrg[i],' ','_', [rfReplaceAll]);
              if not ADOQuery1.Locate('sAMAccountName',copy(edit2.text,10,2)+copy(edit2.Text,4,2)+strLineList[2],[]) then
                if not ADOQuery1.Locate('mail', trim(lowercase(stringreplace(strLineList[0],'_',' ',[rfReplaceAll])) + '.' + lowercase(stringreplace(strLineList[1],'_',' ',[rfReplaceAll]))) + '@alfalaval.com',[]) then
                begin
                  tmp := lowercase(trim(stringreplace(strLineList[0],'_',' ',[rfReplaceAll])));
                  givenname := Uppercase(tmp[1]) + copy(tmp,2,length(tmp));
                  tmp := lowercase(trim(stringreplace(strLineList[1],'_',' ',[rfReplaceAll])));
                  lastname := Uppercase(tmp[1]) + copy(tmp,2,length(tmp));
                  tmp := Tmp ;
                end;
            finally
              strLineList.Free;
            end;
          end;
        finally
          ADOQuery1.Close;
        end;
      finally
        strListOrg.Free;
      end;
    end;
  end;
end;

Open in new window

QC20NAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
Ferruccio AccalaiConnect With a Mentor Senior developer, analyst and customer assistance Commented:
Change your procedure as follows
I've added a function that capitalize the first char even if there're spaces
Note that the last tmp = Tmp is not required!
procedure TFrmMain.Button7Click(Sender: TObject);
  function CapitalizeFirstChar(Name: String): String;
  var
    x: Integer;
    NextUpper: Boolean;
  begin
    NextUpper := True;
    x := 0;
    while x < length(name) do
    begin
      inc(x);
      if NextUpper then
        result := result+Uppercase(name[x])
      else
        result := result+(name[x]);
      NextUpper := name[x] = ' ';
    end;
  end;

var
  strListOrg, strLineList: TStringList;
  I: Integer;
  adComp: IADsContainer;
  adUser: IADsUser;
  tmp, givenname, lastname: string;
begin
  opendialog1.Filter := 'Comma Delimited (*.csv)|*.CSV';
  if opendialog1.Execute then
  begin
    if opendialog1.FileName <> '' then
    begin
      strListOrg := TStringList.Create;
      strListOrg.LoadFromFile(opendialog1.FileName);
      try
        ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Text := 'SELECT sAMAccountName, mail FROM '+ Quotedstr('LDAP://OU=USERS,' + edit2.Text) + ' WHERE objectClass='+ Quotedstr
          ('user') + ' ORDER by CN';
        ADOQuery1.Open;
        try
          for I := 0 to strListOrg.Count - 1 do
          begin
            strLineList := TStringList.Create;
            strLineList.Delimiter := ';';
            try
              strLineList.DelimitedText := stringreplace(strListOrg[I], ' ', '_', [rfReplaceAll]);
              if not ADOQuery1.Locate('sAMAccountName', copy(edit2.Text, 10, 2)+copy(edit2.Text, 4, 2)+strLineList[2], []) then
                if not ADOQuery1.Locate('mail', trim(lowercase(stringreplace(strLineList[0], '_', ' ', [rfReplaceAll])) + '.' + lowercase
                      (stringreplace(strLineList[1], '_', ' ', [rfReplaceAll]))) + '@alfalaval.com', []) then
                begin
                  givenname := CapitalizeFirstChar(lowercase(trim(stringreplace(strLineList[0], '_', ' ', [rfReplaceAll]))));
                  lastname := CapitalizeFirstChar(lowercase(trim(stringreplace(strLineList[1], '_', ' ', [rfReplaceAll]))));
                  //tmp := tmp; this is not required!
                end;
            finally
              strLineList.free;
            end;
          end;
        finally
          ADOQuery1.Close;
        end;
      finally
        strListOrg.free;
      end;
    end;
  end;
end;

Open in new window

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.