String sortieren

Du hast bei meinem ersten Hinweis nicht aufgepasst.
Code:
String value1 = cell.getContents();
String value2 = cell1.getContents();
Damit hast du doch schon den String aus den Zellen geholt oder? Testen und wenn es so ist, dann vergleich die Strings und nicht die cells :rolleyes:
 
Code:
String value1 = cell.getContents();
String value2 = cell1.getContents();

          if (value1.equals(value2)){
           System.out.println("sind gleich");

Das hab ich gemeint, versuchs erstmal, bevor du dich in den Harakiri stürzt ^^
 
Hallo ich bin's ...

Also ich hab mich des Problems mal angenommen. Ich bin leider auch noch nicht so firm in Java, aber ich hab mir das jxl.jar mal runtergezogen und deinen Code etwas getestet.
Wäre es möglich einen Ausschnitt der Excel-Datei hier zu posten, da ich mehrere Ansätze finde und auch denke einige Fehlerquellen entdeckt zu haben.
Du kannst immer nur zwei Strings vergleichen, also weiss das Programm ja nicht dass es die anderen schon gibt.
Also mal bitte die Excel posten dann veruch ich was zu erstellen, was hoffentlich Deinen Vorstellungen entspricht.
 
@AlWi
Natürlich kann man nur jeweils 2 Strings vergleichen, deshalb steht der Vergleich auch in einer for-Schleife :rolleyes:.
Bevor du dir zuviel Arbeit machst, warte erstmal auf das Ergebniss. Bin mir ziemlich sicher dass da schon das Problem war.
 
das ist nur ein teil der excel file, da die datei zu große wäre für das upload limit.

wie gesagt ich muss hier alle namen auslesen (zimmerman,warnk, etc) und dann zählen wie oft jeder einzelne vorkommt. und das ergebniss nach der zählung wir dann ausgegeben. wobei das ja dann nicht nicht mehr der große aufwand ist.

vielen dank für eure hilfe schonmal
vg benni
 

Anhänge

  • namen.zip
    9,8 KB · Aufrufe: 16
So ich hätte da mal was zusammengebastelt, aber es ist wohl nicht das was du gedacht hast :) .
Ich habe Deine Version zwar etwas verbessert und die Namen werden nun auch verglichen, aber wie ich Deinem Text entnehme sollen die Namen gezählt werden, wozu du vermutlich einen Vektor benötigst, da die Anzahl der Namen unklar ist.
Bin leider etwas in Eile, aber wenn ich Zeit hab werd ich mich heut abend nochmal gemütlich hinsetzen und Dein Problem hoffentlich zur Zufriedenheit lösen :) .
Und btw. wie dachtest Du Dir das mit der Ausgabe? Auf der Konsole? Und wie soll die Formatierung dazu aussehen?
Name1: Anzahl
Name2: Anzahl
usw.
so in etwa?

Hier noch das vorerst gelöste Zwischenproblem:
Code:
import java.io.File;
import java.io.IOException;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

public class TableReader
{
	public static void main(String[] args)
	{
		String path = "myFile.xls";
		Workbook workbook = null;

		try
		{
			// Einlesen der Datei
			workbook = Workbook.getWorkbook(new File(path));
		}
		catch (BiffException e)
		{
			System.out.println("BiffException" + e.getMessage());
		}
		catch (IOException e)
		{
			System.out.println("IOException" + e.getMessage());
		}

		// Tabelle initialisieren
		Sheet sheet = workbook.getSheet(0);

		// Erstellen der Zellenobjekte
		Cell cell1, cell2;
		String stringCell1, stringCell2;

		// Die zu durchsuchende Spalte und Startzeile initialisieren
		int suchSpalte = 4;
		int startZeile = 7;

		// Schleife für Zellenüberprüfung
		for (int i = startZeile; i < sheet.getRows(); i++)
		{
			// Initialisieren der Hilfsvariablen
			int k = (i + 1);

			// Einlesen der Zellen
			cell1 = sheet.getCell(suchSpalte, i);
			cell2 = sheet.getCell(suchSpalte, k);

			// Einlesen der Zellen in die String-Variablen
			stringCell1 = cell1.getContents();
			stringCell2 = cell2.getContents();

			// Ausgabe der Zelleninhalte
			// Ausgabe des Zelleninhalts von Cell1
			System.out.println("Zelle [" + suchSpalte + "|" + i + "]: " + stringCell1);
			System.out.println("Zelle [" + suchSpalte + "|" + k + "]: " + stringCell2);

			if (stringCell1.equals(stringCell2))
			{
				System.out.println("Die Zelleninhalte sind gleich.");
			}
			else
			{
				System.out.println("Die Zelleninhalte sind nicht gleich.");
			}
		}
	}
}
 
Hallo ich bin's ...

Also ich hab mal weiter geschustert und hoffe es entspricht nun Deinen Vorstellungen.
Den Dateinamen musst Du natürlich auf Deinen Dateipfad einstellen und die Zeilen bzw Spaltenwerte zum durchsuchen anders setzen, falls diese sich ändern.
Und das ist dabei rausgekommen:
Code:
/**
 * @author AlWi
 */
public class NameCounter
{
	private String name;
	private int counter;

	/**
	 * Konstruktor
	 */
	public NameCounter(String name)
	{
		this.name = name;
		this.counter = 1;
	}

	/**
	 * Erhöht den Namenzähler
	 */
	public void setCounterUp()
	{
		this.counter++;
	}

	/**
	 * Gibt den Namen zurück.
	 * 
	 * @return {@link String}
	 */
	public String getName()
	{
		return name;
	}

	/**
	 * Gibt die Anzahl der gezählten Namen zurück.
	 * 
	 * @return {@link Integer}
	 */
	public int getCounts()
	{
		return counter;
	}
}

Und jetzt die Hauptklasse:

Code:
import java.io.File;
import java.io.IOException;
import java.util.Vector;

import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

/**
 * @author AlWi
 */
public class ExcelTest
{
	// Initialisieren der globalen Variablen
	private String path = "myFile.xls";
	private Workbook workbook = null;
	private Vector<NameCounter> nameVector = new Vector<NameCounter>();
	
	/**
	 * Programm starten.
	 */
	private void start()
	{
		// Abfangen der Exceptions
		try
		{
			// Einlesen der Datei
			this.workbook = Workbook.getWorkbook(new File(path));
		}
		catch (BiffException e)
		{
			System.out.println("BiffException" + e.getMessage());
		}
		catch (IOException e)
		{
			System.out.println("IOException" + e.getMessage());
		}

		// Tabelle initialisieren
		Sheet sheet = this.workbook.getSheet(0);

		// Erstellen der Zellenobjekte
		String cellText;
		NameCounter nameCounter;

		// Die zu durchsuchende Spalte und Startzeile initialisieren
		int suchSpalte = 4;
		int startZeile = 7;

		// Schleife für Zellenüberprüfung
		for (int i = startZeile; i < sheet.getRows(); i++)
		{
			// Einlesen der Zellen in die String-Variablen
			cellText = sheet.getCell(suchSpalte, i).getContents().trim();

			nameCounter = isNameInVector(cellText);

			if (nameCounter == null)
			{
				if (!cellText.equals(""))
				{
					this.nameVector.add(new NameCounter(cellText));
				}
			}
			else
			{
				nameCounter.setCounterUp();
			}
		}

		// Schleife für die Konsolenausgabe
		for (int i = 0; i < this.nameVector.size(); i++)
		{
			nameCounter = this.nameVector.elementAt(i);

			System.out.println(nameCounter.getName() + ": " + nameCounter.getCounts());
		}

	}

	/**
	 * Überprüfen ob der Name bereits im Vector vorhanden ist.
	 */
	public NameCounter isNameInVector(String name)
	{
		NameCounter nameCounter = null;
		NameCounter nameCounterTest;

		for (int i = 0; i < nameVector.size(); i++)
		{
			nameCounterTest = nameVector.elementAt(i);

			if (nameCounterTest.getName().equals(name))
			{
				nameCounter = nameCounterTest;
				break;
			}
			else
			{
				nameCounter = null;
			}
		}

		return nameCounter;
	}
	
	/**
	 * Mainmethode
	 */
	public static void main(String[] args)
	{
		new ExcelTest().start();
	}

}
 
Nichts gegen deinen Einsatz, aber du hilfst ihm nicht wirklich wenn du seine Aufgabe für ihn löst. So ist der Lerneffekt gleich null und als nächstes kommt wahrscheinlich die Frage, wie er das in sein Programm bekommt...
 
also so hilflos bin ich dann wirklich nicht, und ich hab auch ein bisschen ahnung vom programmieren. allerdings sitze ich vor der aufgabe schon ne halbe ewigkeit. hatte die unterschiedlichsten lösungsansätze und dank AlWi bin ich jetzt weiter gekommen.
er hat ja auch nur den teil gemacht den ich nicht lösen konnte.

denn jetzt muss ich noch in excel schreiben. statistik erstellen. und ein prog einbinden.
wenn er das für mich gemacht hätte, dann wäre der lerneffekt weg.

aber auf diesem weg auch nochmal ein großes dankeschön an dich, das du so hilfreich warst und dir für mich zeit genommen hast. falls ich dir mal irgendwie weiterhelfen kann dann sag einfach kurz bescheid.

vg ben
 

Neue Beiträge

Zurück