Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   aus FieldByName das letzte Zeichen kopieren (https://www.delphipraxis.net/177957-aus-fieldbyname-das-letzte-zeichen-kopieren.html)

Alterauge 8. Dez 2013 09:01

aus FieldByName das letzte Zeichen kopieren
 
hallo,

möchte aus FieldByname('Address').Text nur das letzte Zeichen kopieren!
Also der Inhalt von "Address" sieht so aus: 0000007a!

Möchte jetzt aber nur das 'a' kopieren!

Hier mein Quelltext ohne Fehlermeldung und ohne Funktion?

Delphi-Quellcode:
 mysqlbosgrid.FieldByName('Status').Text := mysqlbosmon.FieldByName('Address').Text[(Length(Text)-1)];

Sir Rufo 8. Dez 2013 09:11

AW: aus FieldByName das letzte Zeichen kopieren
 
Gehört das ! jetzt noch zum Inhalt oder brüllst du uns einfach nur an?

Du ermittelst die Länge mit
Delphi-Quellcode:
Length( Text )
.
Da hast du wohl eine Variable
Delphi-Quellcode:
Text
und bekommst dessen Länge.
Vermutlich steht da nix drin, also ergibt das
Delphi-Quellcode:
0

Alterauge 8. Dez 2013 09:18

AW: aus FieldByName das letzte Zeichen kopieren
 
hallo sir rufo,
ist dieser Weg falsch!
Die Länge zu ermitteln, und das letzte Zeichen zu kopieren?

Gruß

himitsu 8. Dez 2013 09:24

AW: aus FieldByName das letzte Zeichen kopieren
 
Der Weg ist nicht so falsch, aber wenn du auf einzelne Chars zugreifst, dann mußt du auch aufpassen, daß es in dem String auch etwas drin ist, auf das man zugreifen kann.

Außerdem haben Strings einen Index, welcher 1-basierend ist, weswegen das letzte Zeichen bei Length zu finden ist. (bei dynamischen Arrays, welche 0-basierend sind, wäre es High oder eben Length-1)

Also
Delphi-Quellcode:
Text[Length(Text)]
, aber wenn Text leer ist, dann gibt es kein Zeichen zum drauf Zugreifen.

Delphi-Quellcode:
RightStr(Text, 1)


Delphi-Quellcode:
PChar(Text)[Length(Text) - 1]

PChar gibt im Fall eines leeren String kein Nil zurück, also einen Zeiger auf den leeren String, sondern einen Zeiger auf eine Dummy-Stringkonstante, welche als #0#0 deklariert ist.
Und da es hier ein Array ist, wird bei 0 angefangen mit Zählen.

Perlsau 8. Dez 2013 09:25

AW: aus FieldByName das letzte Zeichen kopieren
 
Lies doch einfach, was Sir Rufo geschrieben hat:

Du ermittelst die Länge mit Length( Text ) .
Da hast du wohl eine Variable Text und bekommst dessen Länge.
Vermutlich steht da nix drin, also ergibt das 0


1. Was verstehst du an Sir Rufo's Text nicht?

2. Was passiert, wenn das Feld, dessen letztes Zeichen du auslesen möchtest, leer ist?

3. Mit welchem Wert beginnt der Index eines String-Arrays?

Alterauge 8. Dez 2013 09:33

AW: aus FieldByName das letzte Zeichen kopieren
 
hallo,
natürlich steht da was drin!
Sonst würde ich doch nicht fragen! :-)

danke :-)

Perlsau 8. Dez 2013 09:43

AW: aus FieldByName das letzte Zeichen kopieren
 
Zitat:

Zitat von Alterauge (Beitrag 1238941)
hallo,
natürlich steht da was drin!
Sonst würde ich doch nicht fragen! :-)

danke :-)

Mein liebes altes Auge,

ich hatte dir doch drei Fragen gestellt. Es wäre nett, wenn du dich dazu motivieren könntest, diese auch zu beantworten, denn sie dienen dazu, dich auf die richtige Spur zu lenken und dir so zu helfen, dein Problem zu verstehen.

Die zweite Frage lautete nicht: "steht da was drin?", sondern: "Was passiert, wenn das Feld, dessen letztes Zeichen du auslesen möchtest, leer ist?" Denn auf diesen Fall solltest du unbedingt vorbereitet sein, um Laufzeitfehler zu vermeiden.

Sieh mal: das erste Zeichen eines Strings, nennen wir ihn MeinString, wird mit MeinString[1] ermittelt. Wie glaubst du nun das letzte Zeichen ermitteln zu können? Immerhin hattest du bereits auf die Vermutung angestellt, es könnte was mit der Länge des Strings zu tun haben. Da lagst du nicht so falsch, nur solltest du nicht noch 1 abziehen, denn MeinString[Length(MeinString)] ergibt bereits das letzte Zeichen. Oder mache es wie Himitsu vorschlug, mit
Delphi-Quellcode:
LastChar := RightStr(MeinString, 1);
. Nun wird dir vielleicht klar, was geschähe, wenn du z.B. schreiben würdest
Delphi-Quellcode:
LastChar := MeinString[0];
. Die 0 käme dort nämlich hinein, wenn dein String leer wäre, denn dann hätte er die Länge 0. Und da in einem String die darin befindlichen Zeichen mit der Position 1 und nicht mit der Position 0 beginnen, ergäbe das einen Fehler.

Konntest du mir soweit folgen?

Sir Rufo 8. Dez 2013 09:47

AW: aus FieldByName das letzte Zeichen kopieren
 
Zitat:

Zitat von Alterauge (Beitrag 1238941)
hallo,
natürlich steht da was drin!
Sonst würde ich doch nicht fragen! :-)

danke :-)

Das bezweifle ich ...

letzter Versuch ...

Das hast du
Delphi-Quellcode:
var
  Text : string;

mysqlbosgrid.FieldByName( 'Status' ).Text := mysqlbosmon.FieldByName( 'Address' ).Text[( Length( Text ) - 1 )];
deinen Code kann man auch so schreiben
Delphi-Quellcode:
var
  Irgendwas : string;

mysqlbosgrid.FieldByName( 'Status' ).Text := mysqlbosmon.FieldByName( 'Address' ).Text[( Length( Irgendwas ) - 1 )];
Bist du dir immer noch sicher, das dieser Code das machen müsste, was du eigentlich willst?
Welcher Wert steht denn in deiner Variablen
Delphi-Quellcode:
Text
von
Delphi-Quellcode:
Length( Text )
beim Abarbeiten der Zeile (prüfe mit dem Debugger den Wert)?

Eventuell kommst du jetzt drauf (aber ich habe wenig Hoffnung)

@Perlsau

Wenn der Inhalt tatsächlich
Code:
0000007a!
ist, dann muss man ja tatsächlich von der Länge eins abziehen um das a zu bekommen :mrgreen:

Alterauge 8. Dez 2013 09:50

AW: aus FieldByName das letzte Zeichen kopieren
 
hey,

habe gerade noch was ausprobiert!
Deswegen konnte ich Deine Fragen nicht beantworten! (nicht böse sein) :-)!

Das Feld ist nie leer! Besteht immer aus 8 Zeichen! (Info!)

Delphi-Quellcode:
mysqlbosgrid.FieldByName('Status').Text := Copy(mysqlbosmon.FieldByName('Address').Text,8, Length(mysqlbosmon.FieldByName('Address').Text));
So geht es jetzt!

Sir Rufo 8. Dez 2013 09:57

AW: aus FieldByName das letzte Zeichen kopieren
 
Zitat:

Zitat von Alterauge (Beitrag 1238947)
Delphi-Quellcode:
mysqlbosgrid.FieldByName('Status').Text := Copy(mysqlbosmon.FieldByName('Address').Text,8, Length(mysqlbosmon.FieldByName('Address').Text));

Das tut ja richtig weh ...

Wenn du weißt, dass sich mindestens 8 Zeichen darin befinden, warum dann nicht so
Delphi-Quellcode:

mysqlbosgrid.FieldByName('Status').Text := Copy( mysqlbosmon.FieldByName('Address').Text, 8, 1 );
Wenn du weißt, dass sich mindestens/maximal 8 Zeichen darin befinden, warum dann nicht sogar so
Delphi-Quellcode:

mysqlbosgrid.FieldByName('Status').Text := Copy( mysqlbosmon.FieldByName('Address').Text, 8 );
Wenn du tatsächlich das letzte Zeichen haben möchtest - unabhängig wie lang der String ist, dann so
Delphi-Quellcode:
var
  LText : string;

LText := mysqlbosmon.FieldByName('Address').Text;
mysqlbosgrid.FieldByName('Status').Text := Copy( LText, Length( LText ) );


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 Uhr.
Seite 1 von 2  1 2      

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