csv-Datei auslesen und ausgelesene Daten in neue csv-Datei speichern

Randomat2000

Mitglied
Hi,

ich muss eine csv-Tabelle erstellen die die Ergebnisse eines Fußball Turniers darstellen soll. Dazu ist noch eine weitere Tabelle zu erstellen, in der die einzelnen Siege, Niederlagen, Unentschieden etc. aus der anderen Tabelle aufgeführt werden.

Ich habe bereits die erste Tabelle.

Java:
class CSVWriter
{
	int zeilencounter;
	int teamcounter;
	
	public void generateCsvFile(String s)
	{
		try
		{
			
			int max=5;
			
			File eineCSV = new File (s+".csv");
			BufferedWriter writer = new BufferedWriter(new FileWriter(eineCSV, true));
			
			for(zeilencounter = 0; zeilencounter <=max; zeilencounter++)
			{
				if(zeilencounter == 0)
				{
					writer.append(";");
				}
				else
					writer.append("Team "+zeilencounter+";");
			}
			
			writer.append("\n");
			
			for(teamcounter = 1; teamcounter<=max; teamcounter++)
			{
				writer.append("Team "+teamcounter+";");
				
				for(int i = 1; i<=max; i++)
				{
					if((teamcounter) == i)
						writer.append("-"+";");
					
					else
					{
						int a = (int)(Math.random()*5);
						int b = (int)(Math.random()*5);
	
						writer.append(a+":"+b+";");
					}
					
				}
				writer.append("\n");
			}
			
			writer.flush();
			writer.close();
		}
		catch(IOException e)
		{
			e.printStackTrace();
		} 
	}

}

Hier die Meethoden zum Auslesen:

Java:
public int zaehlenGewinner(int[][] team)
	{
		int counter=0;
		
		try
		{
			BufferedReader reader = new BufferedReader(new FileReader("CSVDatei.csv"));
			
			for(int i = 0; i <= max; i++)	//geht jede Zeile durch
			{  
				zeile = reader.readLine();
				
				for(int j = 0; j<=max; j++)	//geht jede Spalte durch
				{
					String[] split=zeile.split(";");                //hier wird die Zeile zerlegt als Trennzeichen ; 
					
					if(split[0].matches("T") || split[0].matches("-"))
					{
						
					}
					
					else
					{
						int a = new Integer(split[j].charAt(1)).intValue();
						int b = new Integer(split[j].charAt(4)).intValue();
						
						if(a > b)
						{
							counter++;
						}
					
					}
					//team[i][2] = counter;
				}
				
			}
			reader.close();
		}
		
		catch(IOException e)
		{
				e.printStackTrace();
		}
		
		return counter;
	}

Neue Tabelle:
Java:
public class GewinnerTabelle
{
	int zeilencounter;
	int teamcounter;
	int counter;
	
	
	public void generateCsvFile()
	{
		try
		{
			
			int max=5;
			
			File eineCSV = new File ("Gewinnertabelle.csv");
			BufferedWriter writer = new BufferedWriter(new FileWriter(eineCSV));
			CSVReader reader = new CSVReader();
			int[][] team = new int[5][7];


			writer.append("Team"+";");
			//writer.append("Platz"+";");
			writer.append("Anzahl \nSiege"+";");
			writer.append("Anzahl \nUnentschieden"+";");
			writer.append("Anzahl \nNiederlagen"+";");
			writer.append("Score"+";");
			writer.append("Punkte"+";");
			writer.append("\n");
			
			for(teamcounter = 1; teamcounter<=max; teamcounter++)
			{
				writer.append("Team "+teamcounter+";");
				
				for(teamcounter = 1; teamcounter<=max; teamcounter++)
				{
					for(int i = 1; i<=max; i++)
					{
						writer.append((reader.zaehlenGewinner(team))+";");
						writer.append((reader.zaehlenUnentschieden(team))+";");
						writer.append((reader.zaehlenNiederlagen(team))+";");
						writer.append((reader.score(team))+";");
						writer.append((reader.punkteZaehlen(team))+";");
						writer.append("\n");
					}
					writer.append("\n");
				}
					
			}
			
			
			writer.flush();
			writer.close();
		}
		catch(IOException e)
		{
			e.printStackTrace();
		} 
	}
}

Jetzt gibt mir das Programm folgenden Fehler zurück:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
at java.lang.String.charAt(Unknown Source)
at CSVReader.zaehlenGewinner(CSVReader.java:36)
at GewinnerTabelle.generateCsvFile(GewinnerTabelle.java:43)
at Menue.printMenue(Menue.java:36)
at Mainclass.main(Mainclass.java:7)
 
Zuletzt bearbeitet:
Naja, dann ist eben ein Wert nicht gesetzt, wir den du mit charAt zugreifen möchtest. Prüfe, ob es legal ist zu zu greifen und mach es nur wenn es geht
 
Die tabelle sieht in etwas so aus:

(leerzeichen);Team1;Team2;..;Team5;
Team1; - ;05:06;..;01:02;
Team2;
Team3;
.
.
.
Team5;...;...;-;

Überall wo die Teams gleich sind ist ein Strich drin.

Das Problem ist ich kann wegen den Try und catch Blöcken kein return machen, allerdings muss ich ja den Counter wieder benutzen um damit die richtige Spalte in der neuen Textdatei befüllen zu können.

Aktueller Standpunkt der Methode mit Reader:
Java:
public void zaehlenGewinner(int[][] team)
	{
		int counter=0;
		team = new int[5][7];
		
		try
		{
			BufferedReader reader = new BufferedReader(new FileReader("CSVDatei.csv"));
			
			for(int i = 0; i <= max; i++)
			{  
				zeile = reader.readLine();
				
				for(int j = 0; j<=max; j++)
				{
					String[] split=zeile.split(";");                //hier wird die Zeile zerlegt als Trennzeichen ; 
					
					if(split[0].matches("T") || split[0].matches("-") || split[0].matches(" "))
					{
						
					}
					
					else
					{
						int a = new Integer(split[j].charAt(1)).intValue();
						int b = new Integer(split[j].charAt(4)).intValue();
						
						if(a > b)
						{
							counter++;
						}
					}
				}
				team[i][2] = counter;
				
				
			}
			reader.close();
			
		}
		catch(IOException e)
		{
				e.printStackTrace();
		}		
	}
 

Zurück
Oben