Definitionsliste mit Java - Kleine Frage

Hallöchen :slight_smile:

Ich absolviere zurzeit ein freiwilliges Schülerpraktikum in der Entwicklungsabteilung einer Produktionsfirma und bekam folgende Aufgabe gestellt:

Das Intranet der Firma führt zu jedem Produkt eine eigene Timeline. Diese zeigt also chronologisch an, welche Produktnummer verändert worden ist und welches Changeset und natürlich die Files. Man stelle sich das ganze so vor:

Heute:

14:30 - Changeset [0002] von Z
5678PR23232

8:00 - Changeset [0001] von XY
1234PR99999

Natürlich steht da noch viel mehr an Information, die natürlich nicht eingelesen werden darf (als Beispiel der Autorenname; Das Programm muss also wissen, was wichtig ist und was nicht). Wenn also mal ein Tool und keine PR-Nummer verändert wurde, muss es mein Programm erkennen. Dieses sollte am Ende ein Array in Excel auswerfen, welches auch noch die veränderten Files beinhaltet.
Bisher bin ich so weit gekommen, dass mein Programm das ganze linear anzeigt, den Code findet ihr hier:


import java.io.IOException;
import java.util.Arrays;
import java.util.regex.Pattern;

import org.jsoup.*;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class Main
{

    /**
     * @param args
     */
    public static void main(String[] args)
    {
         try
         {
            // Link der Timeline 
        	Document doc = Jsoup.connect("http://Link/etc/usw/timeline).get();
            Elements dt = doc.getElementsByTag("dt");
            Elements dd = doc.getElementsByTag("dd");

            String[][] memory = new String[1024][1024];

            int a = 0;
            int b = 0;

            // dt-Teil aka Changeset
            for (Element dtElement : dt)
            {
            	try 
            	{

                	memory[a][0] = dtElement.text();

                	String p1 = "\\[";
                	String p2 = "\\]";

                	Pattern pa1 = Pattern.compile(p1);
                	Pattern pa2 = Pattern.compile(p2);

                	String[] strLeft = pa1.split(memory[a][0]);
                	String[] strRight = pa2.split(strLeft[1]);
                	
                	memory[a][0] = strRight[0];

                	a++;

            	} 	
            			catch (Exception ex)
            			{
            			
            			}
            		
            }
            // dd-Teil aka PR-Nummer
            for (Element ddElement : dd) 
            {
            	memory**[1] = ddElement.text();
            	String pattern = "\\:";
            	Pattern p1 = Pattern.compile(pattern);

            	String[] splt = p1.split(memory**[1]);

            	if (splt[0].contains("PR")) 
            	{
            		memory**[1] = splt[0];
            	} 
            	else 
            	{
            		memory**[1] = "NO VALID PR-NO";
            	}

            		b++;
            }


            for (int i = 0; i < a; i++) 
            {
            		// Darstellung (unfertige) Tabelle
            		System.out.println("Changeset: " + memory**[0]);
            		System.out.println("PR:" + memory**[1]);
            		System.out.println("-------------------------------");

            }


         	} 		
         	catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

    }
    	// String beschneiden
       public static String cutFront(String txt, String teil, int number)
       {
            for (int i = 0; i < number; i++)
            {
                txt = txt.substring(txt.indexOf(teil) + 1, txt.length());
            }
            return txt;
        }

        public static String cutBack(String txt, String teil, int number)
        {
            for (int i = 0; i < number; i++)
            {
                txt = txt.substring(0, txt.lastIndexOf(teil));
            }
            return txt;
        }


}```

Ich arbeite übrigens mit EclipseJuno, falls das wichtig zu Wissen ist. 


Nun zu meiner eigentlichen Frage: Mein Programm liest den Quellcode der Timeline ein. Dieser Quellcode beinhaltet lauter "dd"s und "dt"s. Leider kenne ich mich da zu wenig aus, aber fakt ist mal, dass die dts für die Changesetnummer steht und die dds für die lange PR-Nummer. Es sind etliche und die stehen ja eigentlich normal chronologisch untereinander:


00:00 Changeset [0001] by XY
Java-prototype XYZ-Tool: 1234PR99999 : etcetc...
<dt usw...
```

Bei Zeile 84 hab ich ja den Befehl zum Anzeigen gegeben, damit ich meinen bisherigen Prozess mal ansehen kann (ich musste ja wissen, ob er den Link richtig zuschneidet etc). Mit diesen println habe ich aber quasi die Reihenfolge gegeben, also dass er zuerst dt und dann dd anzeigt.
Da ich nicht sicher bin, ob man das ohne die richtigen Links ausgeben kann, zeige ich euch was er mir anzeigt: (Falls er keine PR-Nummer findet, schreibt er „No valid PR-no“ hin)


Changeset: 0001
PR: 1234PR99999

usw…

Ist es nötig dem Programm erkenntlich zu machen, dass er zuerst dt und dann dd nehmen muss? Oder wird er das automatisch machen wie bisher? Ich bin mir eben nicht sicher wie das dann kommen wird, wenn ich ein Array schreibe und die Files hinzufüge und die println-Befehle wieder lösche.
Im Internet habe ich nur die Antwort: „Die Abfolge von dt- und dd-Elementen innerhalb einer dl-Liste ist nicht streng geregelt. Es dürfen auch mehrere dt- oder dd-Elemente hintereinander folgen.“

Darum hoffe ich auf eure Hilfe :slight_smile:
Leider bin ich noch ein ziemlicher Einsteiger in der Java-Welt und stelle hier hoffentlich nicht ne allzu doofe Frage x.x’

Grüsse von Knoppers

Die Frage scheint ziemlich versteckt-verklausuliert, deswegen nochmal kurz: Es geht um die Frage, wie man damit umgeht, dass in der Eingabe theoretisch nicht nur sowas stehen könnte wie
[XML]

...Zeit...
...PR-Nummer
<dt class="changeset">...Zeit...</dt>
<dd class="changeset">...PR-Nummer </dd>

<dt class="changeset">...Zeit...</dt>
<dd class="changeset">...PR-Nummer </dd>
[/XML] sondern (rein theoretisch) auch sowas wie [XML]
...Zeit...
...PR-Nummer
...PR-Nummer
...PR-Nummer
<dt class="changeset">...Zeit...</dt>
<dt class="changeset">...Zeit...</dt>
<dt class="changeset">...Zeit...</dt>
<dd class="changeset">...PR-Nummer </dd>
[/XML] !? FALLS das gemeint war: Ich würde spontan sagen: Das hat derjenige zu verantworten, der diese Daten generiert (und ggf sollte es schon mit demjenigen abgesprochen und idealerweise auch im Code und anderswo dokumentiert sein). Andernfalls müßte man ja irgendwie anderweitig herausfinden können, welche dd's und dt's zusammengehören...

EDIT: In meinem suggestiv-Beispiel wäre das Problem vielleicht nicht mal so groß: Es kommen ja noch von beiden 4 vor, vielleicht sogar in der zueinander passenden Reihenfolge… aber spätestens, wenn dort einzlene dds oder dts drinstehen, die man nicht zuordnen kann, hätte man sonst ja ein Problem.

Die Aufgabe ist leider sehr verschachtelt und ich bin nicht so gut im Beschreiben^^’

Im Quellcode steht es ja eigentlich sortiert, ich frag mich nur wie das nachher im Array aussehen wird, wenn es keine println-Befehle mehr gibt, die ich in der Reihenfolge schreiben kann wie ich lustig bin.

Ich weiss ja, welche dts und dds zusammengehören, nur weiss es dann auch das Programm?

Mit XML kenne ich mich eben gar nicht aus, darum weiss ich nicht, wie das in einem Java-Code reagiert.

Könnte ich nun so weiterfahren und mir keine Sorgen um die Reihenfolge machen?

Das Programm könnte es wissen, wenn du eine Klasse erstellst, die ein dt und ein dd enthält, die zusammengehören. Dann kannst du Objekte dieser Klasse in einer Liste führen, ohne zu befürchten, dass der Zusammenhang verloren geht.

Die Daten stehen in genau der Reihenfolge im Array, wie sie auch eingelesen werden… ob man die Ausgibt oder nicht, ist ega… (irgendwie glaube ich gerade, irgendwas nicht richtig zu verstehen…)

Werd ich mal probieren, danke :slight_smile:

Ich bin mir eben nicht sicher… Ich werd ansonsten mal fortfahren und das Array erstellen. Und wenn irgendwas schiefgehen sollte, werd ich den Tipp von Crian beherzigen.
Danke euch jetzt schon für eure Mühe :smiley: