Generieren Zufallsdaten aus CSV dateien

Leno

Bekanntes Mitglied
Hallo liebes Forum,

ich habe eine Problem und möchte mich hier an die erfahrenen Programmierer wenden.
Es geht um folgendes ich habe z.B. eine CSV Datei die sieht z.B. so aus :

Name Vorname

Thomas Müller
Mattthias Rabe
Ulrike Stein
Klaus Möller
....
....
.....

usw... sehr viele Daten halt eben. Ich möchte zufallsnamens Kombinationen erzugen also z.B. Ulrike Möller , Klaus Rabe etc.... . Meine Idee war dabei zuerst die Daten nach Frau und Mann zu trennen und dann in seperaten txt. Dateien auf dem Rechner Lokal zu speichern z.B. c://mann_vorname
und c://frau_vorname, dann soll das Programm die Daten aus diesen txt lesen und in ArrayListen speichern. Diese ArrayListen werden dann gemischt ( ich weiß noch nicht wie ) und dann kombiniert.

Meint Ihr der Ansatz ist Logisch um das Problem zu lösen, oder habt ihr einen besseren Vorschlag, Idee die einfacher ist ?

Ich wäre über jede Hilfe sehr Dankbar
 
Hm - du schreibst am Anfang nichts von Männlein und Weiblein, aber wenn das sein muss viel Spass beim aufteilen. Muss wohl von Hand geschehen.
Wenn das so sein muss würde ich gleich drei Dateien generieren - eine mit den Namen, zwei mit den Vornamen.

Dann einfach per Zufallszahl einen Namen und per anderer Zufallszahl einen Vornamen holen und zusammenstellen. (Was natürlich auch stimmt, wenn man alles in einer Datei lässt und nicht geschlechtsspezifisch agiert)

Vorerst tönt das Problem sehr einfach, ausser ich hätte etwas falsch verstanden.
 
Das braucht es nicht zwingend - es braucht so oder so zwei zufällige Dateizugriffe um den Namen und den Vornamen zu lesen - ob die auf eine oder zwei Dateien gehen ist kein sehr grosser Unterschied - Bei einer Datei sind es zwei String-Split-Operation mehr.

Wenn aber nach geschlechtspezifischen Vornamen unterschieden werden muss drängt es sich auf Dateien zu bilden.
 
@Andi_CH : tatsächlich muss ich nach männlein und Weiblein unterscheiden. Dachte daher das ich eine Liste mit Vornamen der Frauen lokal speicher und eine der männer.

dann hatte ich gedacht per auslesen in einen Arry zu speichern z.B. so

Java:
 ArrayList<String> vornameMann = new ArrayList<String>();

	
		try {
			BufferedReader in = new BufferedReader(new FileReader("C:\\Users\\Richard\\Desktop\\vornamen.txt"));
			String zeile = null;
			while ((zeile = in.readLine()) != null) {
				// System.out.println("Gelesene Zeile: " + zeile); nur Informationen 
				
				
				vorname.add(zeile);
			  				
			}
		} catch (IOException e) {
			e.printStackTrace();
		}

und dann müsste ich noch die anderen Daten holen und diese in dem Array mischen und dann zusammenstellen
Also so meine Idee, vielleicht liege ich aber auch total falsch.
 
Wozu unterscheiden ob Frau oder Mann ? Jeder Mann kann den Nachnamen einer Frau haben und umgekehrt.

Ich würde es so machen
Java:
package de.sidiropoulos.tutorials;

public class Zufallsnamen {

	
	BufferedReader br;
	FileReader fr;
	ArrayList vornamen; //speichert die vornamen
	ArrayList nachnamen; //siehe oben
	
	
	//konstruktor mit methodenaufruf
	public Zufallsnamen(){
		
		vornamen = new ArrayList();
		nachnamen = new ArrayList();
		readFile("C:/namen.txt");
		getRandomName();
		
	}
	
	
	void getRandomName(){
		
		int vornameIndex = (int)((Math.random() * vornamen.size()-1) + 1); //erstelle eine Zufallszahl die die max. Groesse der Liste hat
		int nachnameIndex = (int)((Math.random() * nachnamen.size()-1) + 1);//siehe oben
		
		//Ausgabe eines Zufallsnamens
		System.out.println(vornamen.get(vornameIndex) + ", " + nachnamen.get(nachnameIndex));
		
	}
	
	//datei einlesen
	void readFile(String path){
		
		String line = null;
		
		try {
			
			fr = new FileReader(path);
			br = new BufferedReader(fr);
			
			while((line=br.readLine())!=null){
					String temp[] = line.split(";"); //speicher die Werte zwischen den ";" in ein Array ; ist standard csv trennzeichen kannst nehmen welches immer du benutzt
					vornamen.add(temp[0]); //Das Array beinhaltet immer 2 Werte(Vor/Nachname) Index 0 = vorname 1 = Nachname
					nachnamen.add(temp[1]); //siehe oben
			}
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	
	
	public static void main(String[]args){
		
		new Zufallsnamen();
	}
	
	
}
 
Zuletzt bearbeitet:
Danke dir für den tollen Ansatz, dies wird mir bei meiner Ausarbeitung auf jeden Fall weiterhlefen.
Vielen Dank, da kommen noch weitere Probleme auf mich zu 😀

Werde mal weiterbasteln und bei weitere Fragen noch auf euer Fachwissen zurükkommen.Danke
 
Gerne, mein Beispiel macht ja schon alles was du in deiener Aufgabenstellung beschrieben hast. Wenn du Fragen hast einfach posten, hier sind genug Nerds die auf der Arbeit nichts zutun haben :lol:
 
Du brauchst als drei Datenstrukturen - ob es Files, Array oder was auch immer sind, ist im Moment noch nicht so wichtig.

@c_sidi90 - pfui, die Arbeit macht man doch nicht im Konstruktor! ;-)

Die Frage ist einfach wer sich die Arbeit macht m und w Vornamen zu unterscheiden (ausser die sind im Ursprungsfile als solche gekennzeichnet) ansonsten hast du das Problemchen gelöst.
 
Tatsächlich ist die Trennung nach männlein und weiblein sehr wichtig, habe ich gerade erst erfahren.

Hier folgende Anforderung bzw. meine Idee


Name , Vorname , Geschlecht

Schneider, Rofl, M
Rudolf , Olaf M
.........


zweite Datei z.B. txt könnte so aussehen

Name , Vorname , Geschlecht

Schneider, Tina , W
Klein , Lisa , W
.....

Weiss aber leider nicht wie ich die Trennung hinbekommen soll, wahrscheinlich muss ich alle Datensätze per Hand sortieren
 
Auch für dieses Vorhaben muss man die Namen nicht nach Geschlechtern trennen. Das macht auch kein Sinn wie ich es schon im oberen Post beschrieben habe. Falls die Datei nun doch so modifiziert werden soll, dass Geschlechter angegeben werden, gibt es noch immer eine elegantere Lösung als dieses Rumgehampel mit in verschiedene Dateien schreiben (nicht performant bei größeren Listen).

In diesem Fall musst du dir nur Überlegen, wie du beim Einlesen der Zeilen den letzten Eintrag (m oder w ) in deine Liste speicherst.


Wäre jetzt nicht Samstag und ich leicht betrunken würde ich es dir schnell coden, so bleibt zu hoffen, dass jemand anders dir weiterhilft oder du bis Montag warten kannst 😉

LG
 

Zurück
Oben