romero: TXT-Dateien vergleichen

hallo liebe gemeinde,

hab da wieder mal ein problem.

ich möchte gern 2 datensetze mit einander vergleichen. diese datensetze, um welche es sich handelt, sind einmal als txt-dateien vorhanden aber auch als array's.

habe ja schon mittels 2er for-schleifen, die daten ermittelt, welche gleich sind.

vorweg muss ich sagen, dass die 2 zu vergleichenden array's unterschiedliche längen und unterschiedlichen inhalt haben kann.d.h. das 1. array kann z.b. zu 99% gleich mit dem 2. array sein.

der inhalt der beiden ist folgendermaßen:

array_1:

F258_70100_000A_20b
F258_70101_002S_20b
F258_70102_006D_20b
F258_70103_000F_20b
...
F258_70150_050E_20b

array_2:

F258_70100_000A_20b
F258_70101_002T_20b
F258_70102_008U_20b
F258_70103_000F_20b
...
F258_70150_050P_20b

meine for-schleife ermittelt nun die unterschiede und gibt da folgendes aus:

F258_70101_002S_20b --> F258_70101_002T_20b --> neuer ISSUE
F258_70102_006D_20b --> F258_70102_008U_20b --> neue Variante
...
F258_70150_050E_20b --> F258_70150_050P_20b --> neuer ISSUE

was als bedeutung steht, ist nur für mich, damit ich weiß, was gefunden wurde.

nun kann es aber passieren, dass das eine array eine weiteres element besitzt, was im 2. array nicht vorkommt? mit welcher art schleife kann ich sowas erkennen?

denn kann ja da nicht schreiben:

if( array_1[i] != array_2[j] ) irgendwas

denn da vergleicht er ja das eine array zeilenweise mit dem anderen array und gibt da alles aus, was unterschiedlich ist. er soll aber nur das ausgeben, was da mehr drin ist.

also so wie, als wenn er das eine array nimmt, in dem anderen array sucht. und wenn er eine übereinstimmung gefunden hat, dass er dann das 2. element des 2. array's nimmt und wieder im 1. sucht.

hier kurz der code für die unterschiedsermittlungen:

				for( var i = 0; i < infile_vorhanden.length; i++ )  
				{  
					for( var j = 0; j < infile_neu.length; j++ )  
					{  
						if( infile_vorhanden[i].substr( 7, 1 ) != "0" || infile_neu[j].substr( 7, 1 ) != "0" )  
						{  
							if( infile_vorhanden[i].substr( 0, 11 ) == infile_neu[j].substr( 0, 11 ) && infile_vorhanden[i].substr( 11, 3 ) != infile_neu[j].substr( 11, 3 ) )  
							{  
								if( infile_vorhanden[i] != infile_neu[j] )  
								{  
									unterschiede.push( infile_vorhanden[i] + "/" + infile_neu[j] + "/neue Variante vorhanden!" );  
  
									ZählerUngleicherMatten++;  
								};  
  
							} else if( infile_vorhanden[i].substr( 0, 14 ) == infile_neu[j].substr( 0, 14 ) && infile_vorhanden[i].substr( 14, 2 ) != infile_neu[j].substr( 14, 2 ) )  
								{  
									if( infile_vorhanden[i] != infile_neu[j] )  
									{  
										unterschiede.push( infile_vorhanden[i] + "/" + infile_neu[j] + "/neuer Issue vorhanden!" );  
  
										ZählerUngleicherMatten++;  
									};  
  
								} else if( infile_vorhanden[i].substr( 0, 16 ) == infile_neu[j].substr( 0, 16 ) )  
									{  
										if( infile_vorhanden[i] != infile_neu[j] )  
										{  
											unterschiede.push( infile_vorhanden[i] + "/" + infile_neu[j] + "/neues Material gefunden!" );  
  
											ZählerUngleicherMatten++;									  
										};  
									};  
  
						} else if( infile_vorhanden[i].substr( 7, 1 ) == "0" || infile_neu[j].substr( 7, 1 ) == "0" )  
							{  
								if( infile_vorhanden[i].substr( 0, 14 ) == infile_neu[j].substr( 0, 14 ) && infile_vorhanden[i].substr( 14, 2 ) != infile_neu[j].substr( 14, 2 ) )  
								{  
									if( infile_vorhanden[i] != infile_neu[j] )  
									{  
										unterschiede.push( infile_vorhanden[i] + "/" + infile_neu[j] + "/neuer Issue vorhanden!" );  
  
										ZählerUngleicherMatten++;  
									};  
  
								} else if( infile_vorhanden[i].substr( 0, 16 ) == infile_neu[j].substr( 0, 16 ) )  
									{  
										if( infile_vorhanden[i] != infile_neu[j] )  
										{  
											unterschiede.push( infile_vorhanden[i] + "/" + infile_neu[j] + "/neues Material gefunden!" );  
  
											ZählerUngleicherMatten++;									  
										};  
									};  
							};  
					};  
				};

bsp:

array_1:

F258_70100_000A_20b
F258_70101_002S_20b
F258_70102_006D_20b
F258_70103_000F_20b
...
F258_70150_050E_20b

array_2:

F258_70100_000A_20b
F258_70101_002T_20b
F258_70102_008U_20b
F258_70103_000F_20b
...
F258_70150_050P_20b
F258_70199_000A_20b

vergleich der beiden array's muss ergeben, dass er ausgibt, dass das element "F258_70199_000A_20b" hinzugekommen ist oder das in einem anderen falle, dass elemente weggefallen sind (bzw fehlen könnten).

wie gesagt, die array's könnten unterschiedlich lang sein, deswegen kann ich es nicht z.b. so schreiben: for( var i = 0; i < array_1 && array_2; i++ ) da ich ja nicht weiß an welcher stelle das element hinzugekommen ist oder wegfällt. auch das vorherige sortieren ist nicht vorteilhaft, da wie gesagt, es zu unterschiedlichen inhalten kommen könnte und da so eine for-schleife unangebracht ist.

gibt es da so eine möglichkeit?

vielen dank für eure bemühungen und antworten.

lg romero

  1. gibt es da so eine möglichkeit?

    Warum muss es JavaScript sein?

    Kannst du das nicht per Ajax "irgendwo" hinschicken und einfach Kompare oder vergleichbares ausführen lassen?

    1. gibt es da so eine möglichkeit?

      Warum muss es JavaScript sein?

      Kannst du das nicht per Ajax "irgendwo" hinschicken und einfach Kompare oder vergleichbares ausführen lassen?

      weil mein ganzes script auf javascript aufgebaut ist und dieses script lokal auf dem rechner als eine *.hta-datei vorliegt, deswegen.

      1. Warum muss es JavaScript sein?

        Kannst du das nicht per Ajax "irgendwo" hinschicken und einfach Kompare oder vergleichbares ausführen lassen?

        weil mein ganzes script auf javascript aufgebaut ist und dieses script lokal auf dem rechner als eine *.hta-datei vorliegt, deswegen.

        http://solidcodingarchive.appspot.com/resources/NetDiff.htm

        Suchmaschine meiner wahl: "javascript file comparison"

        1. Warum muss es JavaScript sein?

          Kannst du das nicht per Ajax "irgendwo" hinschicken und einfach Kompare oder vergleichbares ausführen lassen?

          weil mein ganzes script auf javascript aufgebaut ist und dieses script lokal auf dem rechner als eine *.hta-datei vorliegt, deswegen.

          http://solidcodingarchive.appspot.com/resources/NetDiff.htm

          Suchmaschine meiner wahl: "javascript file comparison"

          kann man sich das ding kopieren? weil ist genau das was ich brauche.

          1. Suchmaschine meiner wahl: "javascript file comparison"

            kann man sich das ding kopieren? weil ist genau das was ich brauche.

            Wenn du in den Quelltext schaust, wirst du sehen dass K. Jacobson ein Copyright (wenn auch mit Rechtschreibfehler) dafür beansprucht. Ich bin mir aber ziemlich sicher, dass man den guten Mann per Mail erreichen kann und er das Script rausrückt ;)

            Wie bereits erwähnt: das war der erste Treffer bei der Suche in einer Suchmaschine. Solche Lösungen gibts's sicher tonnenweise.

            1. Hallo,

              kann man sich das ding kopieren? weil ist genau das was ich brauche.
              Wenn du in den Quelltext schaust, wirst du sehen dass K. Jacobson ein Copyright (wenn auch mit Rechtschreibfehler) dafür beansprucht. Ich bin mir aber ziemlich sicher, dass man den guten Mann per Mail erreichen kann und er das Script rausrückt ;)

              naja, das Script muss er nicht rausrücken, das steht ja offen zur Verfügung. Nur die Zustimmung, dieses Script anderweitig verwenden zu dürfen, müsste er rausrücken.

              Ciao,
               Martin

              --
              Bitte komme jemand mit einem *g* zum Wochenende, damit nicht über mich gelacht wird.
                (Gunnar Bittersmann)
              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
              1. naja, das Script muss er nicht rausrücken, das steht ja offen zur Verfügung. Nur die Zustimmung, dieses Script anderweitig verwenden zu dürfen, müsste er rausrücken.

                Das meinte ich damit ;)

                1. naja, das Script muss er nicht rausrücken, das steht ja offen zur Verfügung. Nur die Zustimmung, dieses Script anderweitig verwenden zu dürfen, müsste er rausrücken.

                  Das meinte ich damit ;)

                  brauch ja auch nur einen teil, einen codeauszug, nur das, wo er den unterschied ausgibt.das reicht mir ja schon.

                  trotzdem danke dafür.

                  1. trotzdem noch mal ne frage:

                    geht es auch vereinfachter?weil es scheint mir doch sehr komplex zu sein.also ich denke dass für meine zwecke noch einfacher gehen könnte.