Laden...

[erledigt] Menge von Ersetzungsregeln so sortieren, dass schon Ersetztes nicht nochmal ersetzt wird

Erstellt von ian_mcdeath vor 12 Jahren Letzter Beitrag vor 12 Jahren 5.838 Views
Thema geschlossen
Hinweis von herbivore vor 12 Jahren

Der Thread ist leider etwas unübersichtlich und länglich. Wichtige Informationen zu Zyklen bzw. zur Unmöglichkeit, das Problem überhaupt durch Sortieren zu erschlagen, wenn die Regeln am Ende global angewendet werden, kommen erst ziemlich spät. Wenn man vor einem vergleichbaren Problem steht, sollte man den Thread also gründlich und komplett lesen, um nichts wichtiges zu übersehen.

I
ian_mcdeath Themenstarter:in
86 Beiträge seit 2006
vor 12 Jahren
[erledigt] Menge von Ersetzungsregeln so sortieren, dass schon Ersetztes nicht nochmal ersetzt wird

Hi,

ich stehe gerade vor einem kleinen Problem.
Folgender Ausgangspunkt:

Ich habe ein csv-Datei mit "Alt-Neu" Werten.
Darin könnte z. B. folgendes stehen:

1;11
2;22
3;33
22;5
5;55

Würde ich die Daten in der gegebenen Reihenfolge übersetzen hätte ich folgendes Problem:

Kein neuer Wert hätte den Wert 22 da diese in 5 übersetzt würde.
Kein neuer Wert hätte den Wert 5 da diese in 55 übersetzt würde.

Zur Info: Die Daten könnten auch Strings sein - Also bitte nicht auf die Zahlen einschießen.

Also muss ich die Daten so sortieren das folgendes herauskommt:

5;55
22;5
1;11
2;22
3;33

Ich habe schon eine Klasse "Replacement" mit den Properties "OldValue" und "NewValue" und eine Liste dazu:

var a = new List<Replacement>();

Jetzt suche ich nach einer schlauen Art die Daten korrekt zu sortieren.

Hat hier jemand eine Idee?

Danke voran,

Chris

Wer Fehler pfindet darf sie behalden.

G
538 Beiträge seit 2008
vor 12 Jahren

Du musst eine Topologie (für eine topologische Sortierung) aufbauen.
Im Endeffekt musst du also die Übersetzungen als Pfade und die Werte als Knoten in einem Graph verstehen. Da dein Pfad (bzw. Graph) gerichtet ist, kannst du ein Ende und einen Anfang ausmachen.
Wenn du nun von Ende bis Anfang sortierst, dann hast du dein Ergebnis.

Dazu auch in der Wikipedia: Tolopogische Sortierung (EN)

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo ian_mcdeath,

ich bin jetzt nicht sicher ob ich die Aufgabe richtig verstanden haben, aber warum packst du die beiden Spalten nicht ein Dictionary<Alt, Neu> und führst mit diesem die Übersteztung durch?

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

I
ian_mcdeath Themenstarter:in
86 Beiträge seit 2006
vor 12 Jahren

@Grumbler85
Ich habe leider (noch) nicht die leiseste Ahnung wie ich mein Problem mit einer solchen Sortierung lösen könnte - Kling aber nach einem Ansatz.

Hast du noch weiter Infos wie ich diese Sortierung auf mein Problem anwenden kann bzw. Links - Hinweise oder sonstiges?

Merci.

@gfoidl

Wenn du dir die Liste anschaust erkennst du das mit einem unsortierten Dic folgende Probleme auftreten würden:

Kein neuer Wert hätte den Wert 22 da diese in 5 übersetzt würde.
Kein neuer Wert hätte den Wert 5 da diese in 55 übersetzt würde.

Außerdem verwende ich eine eigene Klasse um Doppelnennungen zu erkennen und dem Benutzer vorab darüber zu informieren.

Ob Dic. oder liste oder sonstwas - meine Frage dreht sich allgemein um die Sortierung der Daten anhand der gegebenen Felder/Spalten/Properties.

Chris

Wer Fehler pfindet darf sie behalden.

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo ian_mcdeath,

wie wird denn übersetzt?

Kein neuer Wert hätte den Wert 22 da diese in 5 übersetzt würde.
Kein neuer Wert hätte den Wert 5 da diese in 55 übersetzt würde.

Wenn 22 kommt und nach 5 übersezt wird, so muss halt darauf geachtet werden dass diese (übersetzte) 5 nicht nochmal übersetzt wird. Aber dazu fehlt - mir - die Info über die Übersetzung.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

G
538 Beiträge seit 2008
vor 12 Jahren

Wenn ich das richtig verstehe willst du keine Doppelübersetzung.

5 -> 55: Okay
22 -> 5: Okay

22 -> 5 -> 55: BadCase

Abgessehen von der Topologischen Sortierung kannst du auch einfach zwei Listen machen:

Liste1: Nicht übersetzte Objekte (Queue erscheint geeignet, weil es Pop() gibt)
Liste2: Übersetze Objekte

Damit vermeidest du die doppelte Übersetzung.

Hinweis von gfoidl vor 12 Jahren

Die Queue<T> hat Dequeue, der Stack<T> wäre das mit dem Pop.

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

I
ian_mcdeath Themenstarter:in
86 Beiträge seit 2006
vor 12 Jahren

Hi,

wenn ich das richtig verstehe ist dein letzter Ansatz, dass ich einige Übersetzungen nicht mache?!?

Das klappt leider nicht - gemacht werden müssen alle...

Wer Fehler pfindet darf sie behalden.

G
538 Beiträge seit 2008
vor 12 Jahren

Ähm - doch doch machen sollst du sie schon, aber du nimmst sie aus einer Liste heraus, übersetzt sie und legst sie danach in der "schon abgearbeitet" Liste ab, etwa:


public List<WhateverObject> TranslateAll() {
  Queue<WhateverObject> originals;
  List<WhateverObject> results;

  //Originials füllen

  while(originals.Size > 0)
  {
    var current = originals.Pop();
    TranslateObject(current);
    results.Add(current);
  }

  return results;
}

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

I
ian_mcdeath Themenstarter:in
86 Beiträge seit 2006
vor 12 Jahren

@gfoidl

Darauf zu achten das es nicht übersetzt wird geht nicht da alle Werte übersetzt werden müssen.

Um das beschriebene Problem zu vermeiden braucht es eben diese Sortierung, sodass alle Werte übersetzt werden können.

Hier geht es um 1.000.000 Übersetzungen +
Da kann ich keinen Azubi zum manuellen Testen der Daten dransetzen. ;o)

Chris

Wer Fehler pfindet darf sie behalden.

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo ian_mcdeath,

es soll ja keiner händisch prüfen 😉
Der letzte Vorschlag von Grumbler85 geht ja genau in die Richtung. TranslateObject ist dann das Nachschlagen im Dictionary. Wo ist hier das Problem?

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

I
ian_mcdeath Themenstarter:in
86 Beiträge seit 2006
vor 12 Jahren

Hi,

kein Problem denke ich.
Ich teste das mal mit einem STACK - Nicht Queue. Laut MSDN bietet der Stack den Pop - nicht der Queue. Oder habe ich da was übersehen?

Wenn's funktioniert kommt gleich der Code.

Chris

Wer Fehler pfindet darf sie behalden.

3.170 Beiträge seit 2006
vor 12 Jahren

Hallo,

der Stack hat Push(...) und Pop(), die Queue analog dazu Enqueue(...) und Dequeue().
Für Diene Zwecke eignet sich die Queue wahrscheinlich besser, ausser es ist Dir egal in welcher Reihenfolge die Elemente abgearbeit werden (Stack ist ein LIFO, Queue ein FIFO)

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

I
ian_mcdeath Themenstarter:in
86 Beiträge seit 2006
vor 12 Jahren

Überraschung...

Hier der Code:


while (queue.Count > 0)
{
   var item = queue.Dequeue();

   // Check if we can use this right now
   var ok = queue
      .Where(pair => string.Compare(item.NewValue.Trim(), pair.OldValue.Trim(), StringComparison.InvariantCultureIgnoreCase) == 0)
      .Count() == 0;

   // No usable right now
   if (!ok)
   {
      queue.Enqueue(item);
      continue;
   }

   // Do the job
   Console.WriteLine(item);
}

Und hier das Ergebnis:

1 | 11
3 | 33
5 | 55
22 | 5
2 | 22

Sieht zwar anders aus als das von mir anvisierte Ergebnis - Hat aber den gleichen Effekt wenn ich mich nicht irre.

Wer Fehler pfindet darf sie behalden.

G
538 Beiträge seit 2008
vor 12 Jahren

Durch die Queue wird aber deine Überprüfungslogik, ob du es machen darfst überflüssig ...
Solange es drin ist, darfst du es einfach übersetzen.

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

I
ian_mcdeath Themenstarter:in
86 Beiträge seit 2006
vor 12 Jahren

Hi Grumbler85,

das sehe ich nicht so.

Die Überprüfung schaut nach ob ein weiteres element im queue ist, dessen alter Wert mit dem zu verarbeitenden alten Wert kollidiert.

Wenn dem so ist packe ich es wieder (hinten) an und versuche es später noch einmal.

Zum späteren Zeitpunkt kann das Element mit dem es kollidiert ist aus der Liste raus sein und dann kann ich weiterarbeiten.

Mit diesem Code benötige ich nur einen Queue und nicht einen Queue und eine Liste.

Wer Fehler pfindet darf sie behalden.

G
538 Beiträge seit 2008
vor 12 Jahren

Es kann nicht "kollidieren", da du es nach der Verarbeitung nicht mehr in die Queue steckst ...

Im übrigen hast du eine Endlosschleife, wenn 22 -> 5 und 5 -> 22 in der Übersetzungsliste stehen und sowohl 22 als auch 5 in deiner Queue sind.

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

I
ian_mcdeath Themenstarter:in
86 Beiträge seit 2006
vor 12 Jahren

Hi Grumbler85,

sorry aber ich steige nicht dahinter wie dein Vorschlag funktioniert bzw. was ich besser machen könnte.

Löst deine Variante denn auch das Problem der Zirkelbezüge?

Hier mal ein komplettes Stück Code zum testen.


using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication2
{
   class Program
   {
      static void Main(string[] args)
      {
         var queue = new Queue<MyItem>();

         queue.Enqueue(new MyItem() { NewValue = "11", OldValue = "1" });
         queue.Enqueue(new MyItem() { NewValue = "22", OldValue = "2" });
         queue.Enqueue(new MyItem() { NewValue = "33", OldValue = "3" });
         queue.Enqueue(new MyItem() { NewValue = "5", OldValue = "22" });
         queue.Enqueue(new MyItem() { NewValue = "55", OldValue = "5" });

         while (queue.Count > 0)
         {
            var item = queue.Dequeue();

            // Check if we can use this right now
            var ok = queue
               .Where(pair => string.Compare(item.NewValue.Trim(), pair.OldValue.Trim(), StringComparison.InvariantCultureIgnoreCase) == 0)
               .Count() == 0;

            // No usable right now
            if (!ok)
            {
               queue.Enqueue(item);
               continue;
            }

            // Do the job
            Console.WriteLine(item);
         }

         Console.ReadLine();
      }

      private class MyItem
      {
         public override string ToString()
         {
            return string.Format(@"{0};{1}", OldValue, NewValue);
         }

         public string NewValue { get; set; }
         public string OldValue { get; set; }
      }
   }
}

Wer Fehler pfindet darf sie behalden.

G
538 Beiträge seit 2008
vor 12 Jahren

Ich dachte du willst so etwas hier machen:

Liste1 (Quelle): 1, 3, 4, 5, 22, 12
Liste2 (Übersetzungen): 1 -> 11, 3 -> 13, 4 ->14, 5 -> 22, 22->12, 12 -> 13

Liste3 (Übersetzungen auf Quelle angewendet):
11, 13, 14, 22, 12, 13

Wenn das der Fall ist, kannst du die Queue benutzen, aber nicht für die Übersetzungen, sondern für die Quelle - die Reihenfolge der Übersetzung ist in dem Fall dann unerheblich.

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

U
1.688 Beiträge seit 2007
vor 12 Jahren

Hallo,

noch eine ganz andere Idee: benutze einen Regex: (22)|(1)|(2)|(3)|(5) (nach Länge sortiert). Dann kannst Du beim Durchgehen der Treffer anhand der Gruppennummer die Ersetzung vornehmen.

Und eine weitere: Du ersetzt in einem ersten Durchgang alle betroffenen Teile durch {0}, {1}, usw und benutzt dann String.Format mit einem Array Deiner Ersetzungen.

Der beste Weg hängt sicher von den tatsächlichen Daten ab.

I
ian_mcdeath Themenstarter:in
86 Beiträge seit 2006
vor 12 Jahren

Hallo zusammen,

der Codeschnippsel den ich gepostet habe zeigt exakt die Ausgangslage und die Lösung die ich mit euch zusammen dafür gebastelt habe.

Mit einer kleinen Erweiterung der Lösung (eine Prüfung vorab) fange ich auch Zirkelbezüge ein.

Sobald ich den Teil fertig habe stelle ich ihn hier rein.

Danke soweit für die Ideen.

Wer Fehler pfindet darf sie behalden.

I
ian_mcdeath Themenstarter:in
86 Beiträge seit 2006
vor 12 Jahren

Ok,

hier der Code für die Zirkulären Verweise.
Anders als in meiner Signatur dargelegt bin ich offen für Fehlerkorrekturen wenn ihr welche findet.


private IEnumerable<ReplacementPair> GetCircularItems(IEnumerable<ReplacementPair> pairs)
{
   var retItem = new List<ReplacementPair>();

   // Get a new queue
   var queue = new Queue<ReplacementPair>();

   foreach (var pair in pairs)
   { queue.Enqueue(pair); }

   // Check the queue
   var maxRounds = queue.Count;
   var rows = 0;

   while (queue.Count > 0 &&
      rows < maxRounds)
   {
      // Get the item out of the queue
      var item = queue.Dequeue();

      /* Check if we can use this right now
         * 
         * We can't use it if the new value will be later
         * translated in another value.
         * 
         * If that is the case put it back in the queue and
         * try it later again.
         */
      var canUse = queue
         .Where(pair => string.Compare(item.NewValue.Trim(), pair.OldValue.Trim(), StringComparison.InvariantCultureIgnoreCase) == 0)
         .Count() == 0;

      // Not usable right now
      if (!canUse)
      {
         queue.Enqueue(item);

         if (!retItem.Contains(item))
         { retItem.Add(item); }

         rows++;

         continue;
      }

      // Reset the counter of the circulars
      if (retItem.Contains(item))
      { retItem.Remove(item); }

      maxRounds = queue.Count;
      rows = 0;
   }

   // Return
   return retItem;
}

Wer Fehler pfindet darf sie behalden.

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo ian_mcdeath,

die Lösung gefällt mir nicht. Ist zu sehr Trial and Error. [EDIT]Und stellt nicht sicher, dass schon ersetztes nicht weiter ersetzt wird.[/EDIT] Entweder du sortierst die Einträge topologisch (siehe auch Digraphen topologisch sortieren) oder du nimmst die Regex-Variante (MatchEvaluator ist cool), was beides schon oben vorgeschlagen wurde. [EDIT]Vorausgesetzt es geht am Ende darum, die Regeln in er ermittelten Reihenfolge global auf den gesamten String, in dem alle Ersetzungen ausgeführt werden sollen, anzuwenden.[/EDIT]

herbivore

I
ian_mcdeath Themenstarter:in
86 Beiträge seit 2006
vor 12 Jahren

Hallo herbivore,

interessante Antwort nachdem ich nach Tips oder Code gefragt hatte die zum Teil mit einem oder zwei Sätzen oder ohne nennenswerte hilfreichen Informationen beantwortet wurden. Andere Antworten (wie der Tip mit dem Queue) haben mich auf eine Spur gebracht die zu dem funktionierenden Ergebnis führten.

Tatsächlich bis du der erste der hier zu dem Thema anscheinden schon einn Thread kannte und ihn auch zeigt.

Zum Thema selbts:
Dieser Trial and Error funktioniert. Und er funktioniert mit der gestellten Aufgabe.

Um ehrlich zu sein fehtl mir derzeit noch der Ansatz wie das mit RegEx gehen könnte.

Das Thema Digraphen topologisch sortieren wurde angesprochen - im Internet habe ich dazu auch Code gefunden jedoch (noch) nicht auf meine Ausgangslage anwenden können.
Vielleicht schaffe ich das ja mit deinem Link - ich werde es auf jeden fall versuchen (und hier darüber berichten).

Wer Fehler pfindet darf sie behalden.

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo ian_mcdeath,

Um ehrlich zu sein fehtl mir derzeit noch der Ansatz wie das mit RegEx gehen könnte.

das ist wirklich einfach. Du sortierst die Strings nach Länge absteigend (Zahlen vorher nötigenfalls in Strings umwandeln). Dann wird jeder String mit Regex.Escape behandelt. Dann werden alle Strings durch Pipe ("|") getrennt zusammengefügt (aber ohne zusätzliche Leerzeichen). Dann kommt das Regex.Replace mit MatchEvaluator. Im MatchEvaluator schaust du, was gerade gefunden wurde (Match) und lieferst aus dem Dictionary die dazu passende Ersetzung zurück. Insgesamt sind das nicht mehr als 10 Zeilen.

Das Sortieren nach String-Länge absteigend hat gegenüber der bisherigen Vorgehensweise den Vorteil, dass bei den Regeln 2 -> 5 und 22 -> 66, das Ergebnis er Ersetzung von 22 66 und nicht 55 ist.

herbivore

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo ian_mcdeath,

wenn ich es mir recht überlege, ist der Ansatz mit Regex der einzige von den vorgeschlagenen (inkl. der topologischen Sortierung), der korrekt funktionieren wird.

Es gibt mehrere Probleme, die durch Sortieren nicht gelöst werden können, hier nur eins

1 -> 121
2 -> 232
3 -> 313

Egal welche Regel du zuerst anwendest, eine spätere Regel ersetzt etwas, das schon durch die erste Regel ersetzt wurde, nochmal.

herbivore

I
ian_mcdeath Themenstarter:in
86 Beiträge seit 2006
vor 12 Jahren

Hi herbivore,

ich muss das Frage aber warum sollte

1 -> 121
2 -> 232
3 -> 313

zu einem Problem führen?
Weder 121, noch 232, noch 313 werden später durch einen neuen Wert ersetzt.

Ein Problem wäre folgendes:

1 -> 3
2 -> 232
3 -> 313

Am Ende würde kein Datensatz den Wert 3 haben.
Um das auszuschließen müsste die Sortierung zu einem der folgenden Ergebnisse führen:

3 -> 313
1 -> 3
2 -> 232

oder

2 -> 232
3 -> 313
1 -> 3

Es geht hier nicht um Teilstring sondern nur um Links-Rechts / Alt-Neu.

Wer Fehler pfindet darf sie behalden.

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo ian_mcdeath,

aber warum sollte ... zu einem Problem führen?

du wendest die Regeln ja am Ende der Reihe nach an, aber jede für sich global auf den ganzen String, z.B. per String.Replace. Dann werden aber Teile des schon Ersetzen nochmals ersetzt.

herbivore

I
ian_mcdeath Themenstarter:in
86 Beiträge seit 2006
vor 12 Jahren

Ok, hier zur Auflöärung was damit passiert.
Das fehlte anscheinend für einen klaren Lösungsansatz.

2 -> 232
oder auch
'abc' -> 'def' würde wie folgt angewendet;

update table [MyTable] set [MyColumn] = 'def' where [MyColumn] = 'abc'

Also kein string.replace oder ähnliches.

EDIT: Bevor es zu weiteren verwirrungen kommt:

Natürlich verwende ich SQL-Parameter statt den Wert fest zu setzen. 😉

Wer Fehler pfindet darf sie behalden.

U
1.688 Beiträge seit 2007
vor 12 Jahren

nachdem ich nach Tips oder Code gefragt hatte die zum Teil mit einem oder zwei Sätzen oder ohne nennenswerte hilfreichen Informationen beantwortet wurden

Hast Du eine komplette Lösung erwartet? Du fragtest nach Ideen.

Letztlich wird nur ein Ansatz wirklich funktionieren, der den Ausgangstext als Gesamtheit betrachtet, ohne ihn zu verändern. Das ist bei den Regex der Fall (welche ich bevorzugen würde und einen Weg oben angerissen habe, wobei herbivore's Tipp mit MatchEvaluator das sogar noch wesentlich vereinfacht) oder auch bei einer Ersetzung durch etwas, was nie im Text vorkommen kann (wie eben möglicherweise die String.Format-Platzhalter).

Hinweis von herbivore vor 12 Jahren

Vorausgesetzt es geht am Ende darum, die Regeln in er ermittelten Reihenfolge global auf den gesamten String, in dem alle Ersetzungen ausgeführt werden sollen, anzuwenden - was ja nach Aussage aus dem Beitrag über diesem wohl nicht der Fall ist.

A
764 Beiträge seit 2007
vor 12 Jahren

Ok, das bringt endlich mal Klarheit in die Sache. Bisher war mir nämlich nicht klar, wo dein Problem liegt.

Laut topologie Sortier-blabla musst du dir merken, ob welche Datensätze du schon übersetzt hast und diese von der Übersetzung ausschliessen.
Hier könntest du dir eine Hashtable mit den UIDs der jeweiligen DS machen.

I
ian_mcdeath Themenstarter:in
86 Beiträge seit 2006
vor 12 Jahren

@ujr
Nein - kompletten Code "erwarte" ich nicht.
Sollte dieser aber für ein Problem in diesem Forum schon existieren "erwarte" ich einen Link dahin. Wenn nicht, dann vielleicht ein paar Links die eine Idee unde deren Lösungsansatz tiefer beschreiben. Hatten wir ja auch schon in diesem Thread.

Hinweis von herbivore vor 12 Jahren

Du kannst aber nicht erwarten, dass jeder alle Threads kennt oder auch nur passende Links parat hat. Das ist vermutlich mit den Anführungsstrichen um "erwarten" gemeint. Lass uns nicht darüber reden, welche Antworten du erwartet hast, und ärger dich schon gar nicht, wenn die Hilfe unter deinen persönlichen Erwartungen bleibt, sondern freu dich über jede Hilfe, die du bekommst, egal wie klein sie ausfällt. Wir machen das hier alle freiwillig und kostenlos.

Wer Fehler pfindet darf sie behalden.

G
538 Beiträge seit 2008
vor 12 Jahren

Wenn du das auf einer Datenbank per UPDATE ausführen willst, dann sind die Zyklen ein ernstes Problem, dass du durch eine (beliebige) Sortierung nicht lösen kannst.

Was aber funktionieren wird ist ein JOIN Der Tabelle mit einer aus den Übersetzungen erzeugten Tabelle in der FROM-Clause des UPDATE Befehls.

Hinweis von herbivore vor 12 Jahren

Zyklen wurden schon weiter oben berücksichtigt und abgefangen.

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

I
ian_mcdeath Themenstarter:in
86 Beiträge seit 2006
vor 12 Jahren

Hi,

ich habe das mit dem JOIN probiert - Klappt. 👍
Damit wäre das Problem gelöst - Frohes weiterarbeiten wäre angesagt. Wäre...

Das Problem selbst habe ich ja auch vorher mit der Queue-Variante gelöst die herbivore als zu sehr Trial & Error markiert hat.

Da mein Problem somit doppelt gelöst ist könnte man hier abschließen.

Ich würde nur gerne das Thema mit einer Antwort auf die Sortier-Frage abschließen.

Jetzt da das Problem genauer beschrieben und bekannt ist - Welcher der Lösungsansätze (nicht Trial & Error) löst denn das Sortier-Problem?

Wer Fehler pfindet darf sie behalden.

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo ian_mcdeath,

das wurde doch auch beantwortet, sieht z.B. den Link zur toplogischen Suche, den ich weiter oben gepostet habe.

Damit der Thread, der ja eh schon etwas länglich ist, sich nicht anfängt im Kreis zu drehen, habe ich ihn mal geschlossen.

herbivore

Thema geschlossen