Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Anfangsbuchstaben eines Strings in Großbuchstaben umwandeln (https://www.delphipraxis.net/123810-anfangsbuchstaben-eines-strings-grossbuchstaben-umwandeln.html)

juLiii 9. Nov 2008 10:39


Anfangsbuchstaben eines Strings in Großbuchstaben umwandeln
 
hallo zusammen! :hi:

Ich programmiere gerade - wie ich gesehen habe auch viele andere - HANGMAN für die Schule.

Ich bin damit auch so gut wie fertig - ich habe nur mehr ein kleines Problem:

erst lade ich alle Wörter einer Textdatei in ein Memo-Feld
danach wird per Zufall eines dieser Wörter in ein Label-Feld geladen
um dann mit den Groß- und Kleinbuchstaben kein Problem zu haben verkleinere ich alle mit: wort := lowercase(Wort)

Nach dem Vergleichen der Buchstaben, wenn man auf die Buttons mit den Buchstaben von A-Z klickt, soll - wenn man das Wort nicht gelöst hat - das Lösungswort unterbei in einem Label-Feld erscheinen.

Dabei möchte ich aber das nochmalige Laden der Datei aus dem Memo-Feld verhindern.

Gibt es also eine Funktion bei der man bei einem Wort nur den Anfangsbuchstaben in einen Großbuchstaben umwandelt?? :gruebel:

wäre toll wenn ihr mir helfen könntet

:-D juLiii

Meflin 9. Nov 2008 10:43

Re: Anfangsbuchstaben eines Strings in Großbuchstaben umwand
 
Delphi-Quellcode:
wort[1] := UpperCase(wort[1])
:stupid:

juLiii 9. Nov 2008 10:46

Re: Anfangsbuchstaben eines Strings in Großbuchstaben umwand
 
danke für die schnelle Antwort, aber dabei kommt eine Fehlermeldung:

[Pascal Fehler] Hangman.pas(959): E2010 Inkompatible Typen: 'Char' und 'string'

muss ich dann die Variable "Wort" als char und nicht als string verwenden??

Meflin 9. Nov 2008 10:50

Re: Anfangsbuchstaben eines Strings in Großbuchstaben umwand
 
Zitat:

Zitat von juLiii
[Pascal Fehler] Hangman.pas(959): E2010 Inkompatible Typen: 'Char' und 'string'
muss ich dann die Variable "Wort" als char und nicht als string verwenden??

Nein, Char ist ja nur ein Zeichen, string eine Zeichenkette. Dann probier mal ob das geht:

Delphi-Quellcode:
var
  FirstChar: string;
  wort: string;
begin
  FirstChar := wort[1];
  Result := UpperCase(FirstChar);
(Gibt aber so nur den Anfangsbuchstaben zurück, musst du dann wieder in Wort einsetzen ;) )

Bzw. Vielleicht tuts auch kürzer
Delphi-Quellcode:
wort[1] := UpperCase(string(wort[1]))
:gruebel:

pilic 9. Nov 2008 10:50

Re: Anfangsbuchstaben eines Strings in Großbuchstaben umwand
 
Ich würde es so machen, da UpperCase scheinbar nur Strings akzeptiert.

Delphi-Quellcode:
if (Ord(wort[1]) >= $61) and (Ord(wort[1]) <= $7a) then
  wort[1] := Chr(Ord(wort[1])-$20);

juLiii 9. Nov 2008 10:59

Re: Anfangsbuchstaben eines Strings in Großbuchstaben umwand
 
wahnsinn es funktioniert!!!!! :cheer:

könntest du mir dann auch vl bitte erklären was dieser Code bedeutet??

SirThornberry 9. Nov 2008 11:00

Re: Anfangsbuchstaben eines Strings in Großbuchstaben umwand
 
Das Problem (der Fehlermeldung) ist das UpperCase einen String zurück gibt und diesen kann man nunmal nicht auf einen einzelnen char zuweisen. daher einfach:
Delphi-Quellcode:
YourString[1] := AnsiUpperCase(YourString[1])[1];
Der Obige Code funktioniert übrigens nicht für deutsche Umlauge (der Code mit dem Ord welcher schaut ob das Zeichen im Bereich der kleinen Buchstaben liegt und wenn dem so ist die Differenz zu den Großbuchstaben subtrahiert)

juLiii 9. Nov 2008 11:04

Re: Anfangsbuchstaben eines Strings in Großbuchstaben umwand
 
wow ihr seid toll!! :hello: jetzt bin ich endlich fertig :-D

danke danke danke noch mal für die Hilfe

mkinzler 9. Nov 2008 11:08

Re: Anfangsbuchstaben eines Strings in Großbuchstaben umwand
 
Einfach selber machen:

Delphi-Quellcode:
procedure Captialize( var str: AnsiString);
var
    i, j: integer;
    sl: TStrings;
    s, s2: AnsiString;
    c: AnsiChar;
begin
    sl := TStringList.Create;
    sl.Delimiter := ' ';
    sl.StrictDelimiter := True;
    sl.DelimitedText := str;
    for i := 0 to sl.Count-1 do
    begin
        s := Sl[i];
        c := s[1];
        if c in ['a'..'z'] then
        begin
            s2 := c;
            s := UpperCase( s2) + Copy ( s, 2, Length(s)-1);
        end;
        sl[i] := s;
    end;
    str := sl.DelimitedText;
    sl.Free;
end;

Jürgen Thomas 9. Nov 2008 11:24

Re: Anfangsbuchstaben eines Strings in Großbuchstaben umwand
 
Haben die Jedis nicht eine passende Funktion? Aus der Rx-Library (die doch in der JVCL aufgegangen ist) hatte ich AnsiProperCase verwendet. Jürgen

Noedel 9. Nov 2008 11:47

Re: Anfangsbuchstaben eines Strings in Großbuchstaben umwand
 
wenn ich das richtig verstanden hab, sollte
Code:
upcase(wort[i])
auch gehen!?

probiers mal aus

NineBerry 9. Nov 2008 18:41

Re: Anfangsbuchstaben eines Strings in Großbuchstaben umwand
 
Hallo

Du kannst doch auch einfach das Original-Wort in einer zweiten String-Variable speichern.

Neun

DeddyH 9. Nov 2008 18:52

Re: Anfangsbuchstaben eines Strings in Großbuchstaben umwand
 
Upcase berücksichtigt keine Umlaute, wie bereits weiter oben erwähnt. Möglich wäre auch noch so etwas:
Delphi-Quellcode:
if (Length(wort) > 0) and (wort[1] in ['a'..'z','ä','ö','ü']) then
  wort[1] := Chr(Ord(wort[1]) - $20);
Gilt allerdings nur für Deutsch.

mkinzler 9. Nov 2008 19:09

Re: Anfangsbuchstaben eines Strings in Großbuchstaben umwand
 
Und funktioniert leider unter D2009 nicht mehr

Hawkeye219 9. Nov 2008 19:35

Re: Anfangsbuchstaben eines Strings in Großbuchstaben umwand
 
Hallo,

ich hätte da noch einen Vorschlag für das Teilproblem "AnsiUpCase":

Delphi-Quellcode:
function AnsiUpCase (ch : Char) : Char;
begin
  Result := Char({Windows.}CharUpper(PChar(ch)));
end;
Gruß Hawkeye

DeddyH 9. Nov 2008 19:38

Re: Anfangsbuchstaben eines Strings in Großbuchstaben umwand
 
Zitat:

Zitat von mkinzler
Und funktioniert leider unter D2009 nicht mehr

Mit AnsiStrings sollte das schon funktionieren.

mkinzler 9. Nov 2008 19:48

Re: Anfangsbuchstaben eines Strings in Großbuchstaben umwand
 
Chr liefert allerdings einen Char zurück, welcher nicht kompatibel mit AnsiChar ist.

DeddyH 9. Nov 2008 20:02

Re: Anfangsbuchstaben eines Strings in Großbuchstaben umwand
 
Kann ich nicht wissen, ich hab kein D2009.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz