AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi An welcher Position war/ist die Variable im Template
Thema durchsuchen
Ansicht
Themen-Optionen

An welcher Position war/ist die Variable im Template

Ein Thema von RWarnecke · begonnen am 25. Jul 2016 · letzter Beitrag vom 26. Jul 2016
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#21

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

  Alt 25. Jul 2016, 20:10
Ich habe ein Problem. Ich verstehe die Diskussion um die Herkunft der Werte für die Variablen %year% und %counter% nicht. Ich möchte doch nur eine einfache String Bearbeitung haben, die mir aus dem Ergebnis den Wert einer Variable vom Template zurückgibt.

Warum muss man jetzt wissen, woher die Variablen Ihre Werte bekommen ?

Nach meiner Meinung, ist das doch völlig irrelevant oder übersehe ich hier etwas ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#22

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

  Alt 25. Jul 2016, 20:16
Es ist halt nicht klar, was zum Zeitpunkt der benötigten Funktion vorliegt und was nicht und ob Du an den Gegebenheiten noch etwas optimieren kannst.

Beantworte doch mal meine 5 Fragen. Vielleicht hilft das weiter...

Wenn Du NUR die Ergebnisstrings hast ohne irgendwelche Infos zu den zu Grunde liegenden Templates, dann wird es schwierig.

Die Frage ist, wozu diese Strings dann gespeichert werden, wenn man diese nachher eh nicht mehr vernünftig interpretieren kann.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#23

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

  Alt 25. Jul 2016, 20:50
Hallo,

ich versuche mal ein bisserl "rumzuspinnen".

Dazu mache ich folgende Annahmen:

1. Dir sind alle Templates bekannt.
2. Dir sind für alle Variabeln die möglichen Maximalwerte bekannt.
3. Alle aus den Templates erstellten Werte sind rein nummerische Werte.

Stimmt eine der Annahmen nicht, dann vergiss den Rest.

Für jedes Template werden folgende Schritte ausgeführt:

1. Das Template wird mit den Maximalwerten befüllt.

2. Per SQL suchst Du nun in der Datenbank den höchsten Wert, der kleiner als der soeben erstellte Wert ist.
Code:
Select max(Spalte) from tabelle where Spalte < "Ergebnis von 1."
3. Da Dir zu diesem Zeitpunkt der Aufbau des Templates und der deraus erstelle Wert bekannt sind, müsstest Du nun durch entfernen aller der Teile, die nicht durch %counter% in den Wert "hineingekommen" sind, den von Dir gesuchten %counter%-Wert erhalten.

Sollte ich um zu viele (und vor allem fehlerhafte) Ecken gedacht haben, dann vergiss das Geschreibsel von mir bitte.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#24

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

  Alt 25. Jul 2016, 21:05
Das bringt mir doch alles nichts. Es geht doch nur lediglich um den Importvorgang und nach diesem den Counter entsprechend hochzusetzen. Die ganzen Spekulationen und Fragen habe ich in meinen Beiträge beantwortet oder bestätigt.

Ich formuliere es nochmal als letzten Versuch:

Ich möchte aus einem Ergebniswert (kann alle Zeichen enthalten) mit Hilfe des Templates den Wert des Counters bestimmen. Alles andere muss und soll so bleiben. Welche Möglichkeiten habe ich ?
Rolf Warnecke
App4Mission
  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
 
#25

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

  Alt 25. Jul 2016, 21:06
Ich habe ein Problem. Ich verstehe die Diskussion um die Herkunft der Werte für die Variablen %year% und %counter% nicht. Ich möchte doch nur eine einfache String Bearbeitung haben, die mir aus dem Ergebnis den Wert einer Variable vom Template zurückgibt.

Warum muss man jetzt wissen, woher die Variablen Ihre Werte bekommen ?

Nach meiner Meinung, ist das doch völlig irrelevant oder übersehe ich hier etwas ?
Nein
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
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#26

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

  Alt 25. Jul 2016, 21:07
@Sir Ruf: Auf welche Frage antwortest Du jetzt ?
Rolf Warnecke
App4Mission
  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
 
#27

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

  Alt 25. Jul 2016, 21:21
Ich versuche dann mal etwas konstruktives (nur die Theorie):

Wir haben das Template, was irgendwo die Zeichenfolge '%counter%' enthält.
Oder anders betrachtet besteht das Template aus 3 Abschnitten:
  1. Eine Zeichenfolge
  2. %counter%
  3. Eine Zeichenfolge
Wenn man diese Zeichenfolgen hat, dann kann man (vereinfacht) aus dem eigentlichen String vorne und hinten die Längen der Zeichenfolgen wegnehmen und schon bleibt nur der String für den Counter übrig.

Code:
100%counter%3081%year%

Vorne 100 => 3 Zeichen
Hinten 3081%year% (year immer 4 Ziffern) => 30810000 => 8 Zeichen
Code:
100217830812016

3 Zeichen vorne entfernen => 217830812016
8 Zeichen hinten entfernen => 2178
heureka!
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 (25. Jul 2016 um 21:26 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#28

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

  Alt 25. Jul 2016, 21:41
Also noch ein Versuch einer Lösung:

Du musst für jedes Template den entsprechenden höchsten Wert aus Deinen Daten ermitteln, alles aus diesem Wert entfernen, was nicht durch den Platzhalter %counter% in den Wert eingeflossen ist und schon hast Du den Wert für %counter%.

Da wir keine konkreteren Informationen über den Ursprung der Daten und den Aufbau der Templates haben als: "kann so P%counter%%year% oder so ähnlich aussehen", können wir auch keine konkretere Lösung entwickeln, als es könnte so oder so ähnlich gehen.

Und Vorschläge für so oder so ähnlich gibt es jetzt schon einige.

Sir Rufo beschrieb in seinem letzten Beitrag das, was ich mit meinem Vorschlag meinte.

Man nehme aus dem größten vorhandenen Wert alles heraus, was "fest" im Template enthalten ist, entferne das Jahr und schon hat man den Counter.

Da es unterschiedliche Templates gibt, muss für jedes Template eine eigene Counterextrahiermethode her. Die bisherigen Informationen lassen nicht erkennen, dass es eine allgemeingültige Lösung für beliebige Templates geben könnte.

Geändert von nahpets (25. Jul 2016 um 22:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.006 Beiträge
 
Delphi 12 Athens
 
#29

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

  Alt 25. Jul 2016, 22:30
Eigentlich bin ich ja der Letzte, der sowas vorschlagen würde, aber nach dem Vortrag von Daniel bei der CodeRage DE:
Delphi-Quellcode:
uses
  System.RegularExpressions;

function ExtractCounter(const Template, Value: string): Integer;
var
  pattern: string;
begin
  pattern := Template.Replace('%counter%', '([\d]+)', [rfIgnoreCase]).Replace('%year%', '(?:[\d]{4})', [rfIgnoreCase]);
  result := TRegEx.Match(Value, pattern).Groups[1].Value.ToInteger;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  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
 
#30

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

  Alt 25. Jul 2016, 22:39
Oder eben nach alter Väter Sitte:
Delphi-Quellcode:
program Project4;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils;

function GetCounterFromTemplatedString( const Str, Template: string ): Integer;
const
  CCounter = '%counter%';
  CYear = '%year%';
  CYearDefault = '0000';
var
  tmp : string;
  lFirst, lTail, lLength: Integer;
begin
  tmp := Template.Replace( CYear, CYearDefault );
  lFirst := tmp.IndexOf( CCounter );
  if lFirst = -1
  then
    raise Exception.Create( 'Fehlermeldung' );

  lTail := tmp.Length - lFirst - CCounter.Length;
  lLength := Str.Length - lFirst - lTail;

  tmp := Str.Substring( lFirst, lLength );
  Result := Integer.Parse( tmp );
end;

procedure Check( const Str, Template: string; expected: Integer );
begin
  if GetCounterFromTemplatedString(str,template) <> expected then
    raise Exception.Create('Fehlermeldung');
end;

procedure Test;
begin
  Check( '1001030812016', '100%counter%3081%year%', 10 );
  Check( '10012530812016', '100%counter%3081%year%', 125 );
  Check( '100217830812016', '100%counter%3081%year%', 2178 );
  Check( '10047930812016', '100%counter%3081%year%', 479 );

  Check( 'P12016', 'P%counter%%year%', 1 );
  Check( 'P1002016', 'P%counter%%year%', 100 );
end;

begin
  try
    Test;
  except
    on E: Exception do
      Writeln( E.ClassName, ': ', E.Message );
  end;
  ReadLn;

end.
PS: leider allgemeingültig
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 (25. Jul 2016 um 22:41 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 06:42 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