Hallöchen
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
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