AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein aus FieldByName das letzte Zeichen kopieren
Thema durchsuchen
Ansicht
Themen-Optionen

aus FieldByName das letzte Zeichen kopieren

Ein Thema von Alterauge · begonnen am 8. Dez 2013 · letzter Beitrag vom 8. Dez 2013
Antwort Antwort
Seite 1 von 2  1 2      
Alterauge

Registriert seit: 4. Mär 2011
306 Beiträge
 
Delphi 2010 Professional
 
#1

aus FieldByName das letzte Zeichen kopieren

  Alt 8. Dez 2013, 10:01
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?

 mysqlbosgrid.FieldByName('Status').Text := mysqlbosmon.FieldByName('Address').Text[(Length(Text)-1)];
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: aus FieldByName das letzte Zeichen kopieren

  Alt 8. Dez 2013, 10:11
Gehört das ! jetzt noch zum Inhalt oder brüllst du uns einfach nur an?

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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Alterauge

Registriert seit: 4. Mär 2011
306 Beiträge
 
Delphi 2010 Professional
 
#3

AW: aus FieldByName das letzte Zeichen kopieren

  Alt 8. Dez 2013, 10:18
hallo sir rufo,
ist dieser Weg falsch!
Die Länge zu ermitteln, und das letzte Zeichen zu kopieren?

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#4

AW: aus FieldByName das letzte Zeichen kopieren

  Alt 8. Dez 2013, 10:24
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 Text[Length(Text)] , aber wenn Text leer ist, dann gibt es kein Zeichen zum drauf Zugreifen.

RightStr(Text, 1)

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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 8. Dez 2013 um 10:43 Uhr)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: aus FieldByName das letzte Zeichen kopieren

  Alt 8. Dez 2013, 10:25
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?
  Mit Zitat antworten Zitat
Alterauge

Registriert seit: 4. Mär 2011
306 Beiträge
 
Delphi 2010 Professional
 
#6

AW: aus FieldByName das letzte Zeichen kopieren

  Alt 8. Dez 2013, 10:33
hallo,
natürlich steht da was drin!
Sonst würde ich doch nicht fragen!

danke
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

AW: aus FieldByName das letzte Zeichen kopieren

  Alt 8. Dez 2013, 10:43
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 LastChar := RightStr(MeinString, 1); . Nun wird dir vielleicht klar, was geschähe, wenn du z.B. schreiben würdest 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?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: aus FieldByName das letzte Zeichen kopieren

  Alt 8. Dez 2013, 10:47
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 Text von 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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 8. Dez 2013 um 10:51 Uhr)
  Mit Zitat antworten Zitat
Alterauge

Registriert seit: 4. Mär 2011
306 Beiträge
 
Delphi 2010 Professional
 
#9

AW: aus FieldByName das letzte Zeichen kopieren

  Alt 8. Dez 2013, 10:50
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!)

mysqlbosgrid.FieldByName('Status').Text := Copy(mysqlbosmon.FieldByName('Address').Text,8, Length(mysqlbosmon.FieldByName('Address').Text)); So geht es jetzt!
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: aus FieldByName das letzte Zeichen kopieren

  Alt 8. Dez 2013, 10:57
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 ) );
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz