Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   An welcher Position war/ist die Variable im Template (https://www.delphipraxis.net/189812-welcher-position-war-ist-die-variable-im-template.html)

Uwe Raabe 25. Jul 2016 17:01

AW: An welcher Position war/ist die Variable im Template
 
Wäre es denkbar, daß du dir den Counter selbst irgendwie merkst? Das würde sogar eine Änderung des Templates überstehen.

RWarnecke 25. Jul 2016 17:03

AW: An welcher Position war/ist die Variable im Template
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1343325)
Wäre es denkbar, daß du dir den Counter selbst irgendwie merkst? Das würde sogar eine Änderung des Templates überstehen.

Ja, ich merke mir den Wert des Counters. Aber wie soll mich das weiterbringen, wenn ich das obenstehende Beispiel nehme ? Wenn mein gemerkter Counter auf 11 steht, muss ich den ja nach dem Import auf 2178 setzen.

ConnorMcLeod 25. Jul 2016 17:26

AW: An welcher Position war/ist die Variable im Template
 
Aus dem Kopf ungetestet ungefähr so: ?
Delphi-Quellcode:
const
  TMP_COUNTER = '%counter%';
  TMP_YEAR   = '%year%';

function ExtractCounterFromString(const AString: string; const ATemplate: string): integer;
var
  liPosCounter, liLengthCounter: integer;
  liLengthYear: integer;
  lsResult: string;
begin
  liPosCounter := Pos(TMP_COUNTER, ATemplate);
  liLengthCounter := Length(TMP_COUNTER);
  liLengthYear := Length(TMP_YEAR);
  lsResult := Copy(AString, liPosCounter + liLengthCounter + 1, Length(AString));
  lsResult := Copy(lsResult, 1, Length(lsResult) - liLengthYear);
  Result := StrToIntDef(lsResult, -1);
end;

procedure ImportiereDatensaetze;
var
  liMaxCounter: integer;
begin
  liMaxCounter := -1;
  while EinDatensatzErfolgreichGelesen do begin
    liMaxCounter := max(liMaxCounter, ExtractCounterFromString(GelesenerDatensatz.CounterString);
  end;
  DoWhateverWith(liMaxCounter);
end;

stahli 25. Jul 2016 17:31

AW: An welcher Position war/ist die Variable im Template
 
Ich denke, Du musst das Problem mal zerlegen.

1) Du bekommst folgende Strings
1001030812016 10012530812016 100217830812016 10047930812016
aus einer Datenbank?

2) Du willst den höchsten Counter heraus finden?

3) Es können unterschiedliche Templates benutzt worden sein, also wäre als String auch 1232016 denkbar, wo Counter 23 oder 3 sein kann?

4) Du hast keine Ahnung, welche Template zu Grunde lag und wie das strukturiert war?

5) An den aktuellen Gegebenheit kannst Du nichts umstellen?

ringli 25. Jul 2016 17:44

AW: An welcher Position war/ist die Variable im Template
 
Zitat:

Zitat von RWarnecke (Beitrag 1343313)
Beide Variablen werden mit StringReplace entsprechend bei der Benutzung des Templates ersetzt.

Wie wird denn die Variable mit StringReplace ersetzt? Wenn ich das richtig verstehe "weiß" StringReplace doch irgendwoher das er den Counter mit einem bestimmten Zahlenwert ersetzen soll. :gruebel:

Sir Rufo 25. Jul 2016 17:48

AW: An welcher Position war/ist die Variable im Template
 
@ringli

Delphi-Quellcode:
StringReplace( '100%counter%234', '%counter%', '42' ) => '10042234'

Sir Rufo 25. Jul 2016 17:54

AW: An welcher Position war/ist die Variable im Template
 
Man kann so einen String auseinandernehmen, wenn das Template bekannt ist und es nur eine Variable gibt.

Wenn im Template also
Delphi-Quellcode:
'%counter%'
und
Delphi-Quellcode:
'%year%'
enthalten sind, dann kann ich jede Kombination aus einem beliebigen Template erkennen, wenn zugleich gewährleistet ist, dass
Delphi-Quellcode:
'%year%'
immer 4-stellig ist. (Die Platzhalter für counter sollte allerdings nur einmal vorkommen).

Das Template selber muss aber bekannt sein.

Oder anders ausgedrückt, das Template muss für jeden counter-Wert einen eindeutigen Wert liefern, dann kann man es auch zurückrechnen.

ringli 25. Jul 2016 18:03

AW: An welcher Position war/ist die Variable im Template
 
Zitat:

Zitat von Sir Rufo (Beitrag 1343331)
Delphi-Quellcode:
StringReplace( '100%counter%234', '%counter%', '42' ) => '10042234'

Genau das meine ich. Um beim Beispiel zu bleiben kommt die 42 ja irgendwoher... Zumindest verstehe ich es so das das bereits funktioniert.

Uwe Raabe 25. Jul 2016 18:32

AW: An welcher Position war/ist die Variable im Template
 
Zitat:

Zitat von RWarnecke (Beitrag 1343326)
Zitat:

Zitat von Uwe Raabe (Beitrag 1343325)
Wäre es denkbar, daß du dir den Counter selbst irgendwie merkst? Das würde sogar eine Änderung des Templates überstehen.

Ja, ich merke mir den Wert des Counters. Aber wie soll mich das weiterbringen, wenn ich das obenstehende Beispiel nehme ? Wenn mein gemerkter Counter auf 11 steht, muss ich den ja nach dem Import auf 2178 setzen.

Wenn beim Import ein Counter von 2178 kommt und du dein gemerkter Counter auf 11 steht, dann merkst du dir offenbar nicht den richtigen Counter - nämlich den mit 2178. Zugegeben, ich weiß nichts über das System. Deswegen die Frage.

ringli 25. Jul 2016 18:45

AW: An welcher Position war/ist die Variable im Template
 
Ich könnte mir das etwa so vorstellen:
Delphi-Quellcode:
counterValue := '42';
highestValue := 0;
StringReplace('100%counter%234', '%counter%', counterValue);
if IntToStr(counterValue) > highestValue then
  begin
    hightestValue := IntToStr(counterValue);
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr.
Seite 2 von 4     12 34      

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