AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi An bestimmter Stelle eines Strings einen Wert setzen
Thema durchsuchen
Ansicht
Themen-Optionen

An bestimmter Stelle eines Strings einen Wert setzen

Ein Thema von Jerry · begonnen am 29. Mai 2008 · letzter Beitrag vom 29. Mai 2008
Antwort Antwort
Jerry

Registriert seit: 24. Feb 2005
Ort: Schweiz/Thurgau
138 Beiträge
 
Delphi 2010 Professional
 
#1

An bestimmter Stelle eines Strings einen Wert setzen

  Alt 29. Mai 2008, 15:22
Hallo zusammen

Ich habe einen String der sieht so aus:

;;;;;;;;;; (also 10 Semikolons)

Wie kann ich nun z.B: an der 5 bis 8 Stelle einen Wert einfüllen?

Also ich möchte am 5. Trennzeichen den Wert 100 setzen:
;;;;100;;;;;

Danach an 6. Stelle den Wert 200:

;;;;100;200;;;;

usw.

Gibt es da schon eine Funktion in Delphi, die das kann?

Vielen Dank für die Hilfe!

Grüsse vom Bodensee (30Grad Celsius)
  Mit Zitat antworten Zitat
Jerry

Registriert seit: 24. Feb 2005
Ort: Schweiz/Thurgau
138 Beiträge
 
Delphi 2010 Professional
 
#2

Re: An bestimmter Stelle eines Strings einen Wert setzen

  Alt 29. Mai 2008, 15:38
Habe mir jetzt selber geholfen... Habe eine Funktion SetPiece geschrieben:

Vielleicht könnt Ihr diese auch mal gebrauchen...

Delphi-Quellcode:
function SetPiece(S: string; D: Char; i: Integer; ReplaceString: string): string;
var
  Count, Position, EndPosition: Integer;
  Stop: Boolean;
  NewString: string;
begin
  NewString := '';
  Count := 1;
  Stop := (Count >= i);
  while not Stop do
  begin
    Position := Pos(D, S);
    if Position > 0 then
    begin
      NewString := NewString + Copy(S, 1, Position);
      Delete(S, 1, Position)
    end
    else
    begin
      S := '';
      Stop := True;
    end;
    Count := Count + 1;
    if Count = i then
      Stop := True;
  end;

  EndPosition := Pos(D, S);
  if EndPosition = 0 then
    EndPosition := Length(S)
  else
    EndPosition := EndPosition - 1;

  Result := Copy(S, 1, EndPosition);
  Result := NewString + ReplaceString + Copy(S, Length(Result) + 1, Length(S))
end;
  Mit Zitat antworten Zitat
Benutzerbild von tomsel
tomsel

Registriert seit: 8. Dez 2005
Ort: am Chiemsee
304 Beiträge
 
Delphi 7 Professional
 
#3

Re: An bestimmter Stelle eines Strings einen Wert setzen

  Alt 29. Mai 2008, 15:43
Hättest auch Insert nehmen können. Aber warum einfach ....
Ein Experte ist ein Mann, der hinterher genau sagen kann, warum seine Prognose nicht gestimmt hat. (Winston Churchill)
  Mit Zitat antworten Zitat
Jerry

Registriert seit: 24. Feb 2005
Ort: Schweiz/Thurgau
138 Beiträge
 
Delphi 2010 Professional
 
#4

Re: An bestimmter Stelle eines Strings einen Wert setzen

  Alt 29. Mai 2008, 15:55
Danke... )

Ich kannte Insert nicht, aber es führt nicht so einfach zum Ergebnis wie meine
Funktion... )

Ich kann meine Funktion z.B so aufrufen:
Mystring :=';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;';
SetPiece(MyString, ';', 20, '100');

und schon habe ich an der 20. Stelle meines Trennzeichen den Wert 100.

Trotzdem vielen Dank.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: An bestimmter Stelle eines Strings einen Wert setzen

  Alt 29. Mai 2008, 15:59
Zitat von Jerry:
Ich kannte Insert nicht, aber es führt nicht so einfach zum Ergebnis wie meine
Funktion... )
Insert(s,'100',20);
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von tomsel
tomsel

Registriert seit: 8. Dez 2005
Ort: am Chiemsee
304 Beiträge
 
Delphi 7 Professional
 
#6

Re: An bestimmter Stelle eines Strings einen Wert setzen

  Alt 29. Mai 2008, 16:06
Ja, klar, haste Recht. Die Position eines bestimmten Trennzeichen muss man natürlich erst ermitteln. Aber dafür bräuchtest du nur eine max. 2-zeilige Schleife, denk ich mal.
Ein Experte ist ein Mann, der hinterher genau sagen kann, warum seine Prognose nicht gestimmt hat. (Winston Churchill)
  Mit Zitat antworten Zitat
Benutzerbild von tomsel
tomsel

Registriert seit: 8. Dez 2005
Ort: am Chiemsee
304 Beiträge
 
Delphi 7 Professional
 
#7

Re: An bestimmter Stelle eines Strings einen Wert setzen

  Alt 29. Mai 2008, 16:08
Zitat von DeddyH:
Zitat von Jerry:
Ich kannte Insert nicht, aber es führt nicht so einfach zum Ergebnis wie meine
Funktion... )
Insert(s,'100',20);
Ja, aber wenn man werte eingefügt hat, rutschen die dahinter liegenden Trennzeichen ja weiter nach hinten. Das Trenzeichen Nr 21 liegt in deinem beispiel dann auf Position 24 (?) im String.
Ein Experte ist ein Mann, der hinterher genau sagen kann, warum seine Prognose nicht gestimmt hat. (Winston Churchill)
  Mit Zitat antworten Zitat
Benutzerbild von tomsel
tomsel

Registriert seit: 8. Dez 2005
Ort: am Chiemsee
304 Beiträge
 
Delphi 7 Professional
 
#8

Re: An bestimmter Stelle eines Strings einen Wert setzen

  Alt 29. Mai 2008, 16:17
... was aber nix ausmaacht, wenn man von hinten beginnt, die Werte einzufügen. Man könnte die Werte aber auch erst ganz am Ende der Verarbeitung zu einem CSV-String zusammensetzen, dann erübrigt sich das Einfügen.
Ein Experte ist ein Mann, der hinterher genau sagen kann, warum seine Prognose nicht gestimmt hat. (Winston Churchill)
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: An bestimmter Stelle eines Strings einen Wert setzen

  Alt 29. Mai 2008, 17:42
Hallo Jerry,

wenn deine Strings CSV-konform sind, dann funktioniert auch sowas:

Delphi-Quellcode:
function SetValue(const aLine, aValue: string; aIndex: Cardinal;
    aDelimiter: Char = ','; aQuoteChar: Char = '"'): string;
begin
  with TStringList.Create do
  try
    Delimiter := aDelimiter;
    QuoteChar := aQuoteChar;
    DelimitedText := aLine;
    if aIndex = Count
      then Add(aValue)
      else Strings[aIndex] := aValue;
    Result := DelimitedText;
  finally
    Free;
  end;
end;
Grüße vom marabu

Nachtrag: Sonderbehandlung für letzten Value eingeführt, zu große Indexwerte werfen eine Exception.
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:38 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