Textdatei in App darstellen

K

kuerbis

Neues Mitglied
0
Guten Abend,

ich bin neu hier aber komme leider bei meiner Projektarbeit für die Schule nicht mehr weiter und hoffe das mir hier jemand weiterhelfen kann oder einen Tipp hat wo ich mir anderweitig Hilfe suchen kann.

hier meine Aufgabe

ich soll eine App Programmieren auf welcher der Stundenplan mit intigriertem Vertretungsplan meiner schule für jede Klasse individuell angezeigt wird. Die Schule stellt mir hierfür eine text Datei zur Verfügung welche unten dargestellt wir (dies ist nur ein kleiner Auszug).Die Datei ist nach Lehrern sortiert und soll aber nach Klassen und Datum sortiert werden damit mann dann auf einer Seite der app einen Tag der klasse "xy" darstellen kann. d.h. 70 Klassen*6Tage = 420 Seiten :thumbsup:


mein Problem und Frage

wie filtere ich die text Texdatei und wie bekomme ich diese in meine app?

ich habe vieles über einen filereader gelesen, allerdings konnte ich nicht finden, welchen filereader ich brauche.



Anmerkung

mir geht es nicht darum das mir jemand die komplette Lösung für das Projekt liefert geschweige denn den fertig programmierten Code. Aber vielleicht kann mir jemand Denkanstöße geben welche mir weiterhelfen.




Erläuterung der Datei
angezeigt wird in dieser reinfolge:

Lehrer, Jahr, Monat, Tag, Stunde, Fach, Klasse, Raum,*Rest ist nicht von Bedeutung*,


Code:
l1,2015,1,29,11,tqm,ftmt3,d 1.5,0,,2235,1700,45,
l1,2015,1,29,12,tqm,ftmt3,d 1.5,0,,2235,1750,45,
l1,2015,1,30,4,pq,3bkm2/1t,a110,0,,1955,1005,45,
l1,2015,1,30,5,pq,3bkm2/1t,a110,0,,1955,1105,45,
l1,2015,2,3,4,tqm,ftm2/1,d 0.4,0,,2150,1005,45,
l1,2015,2,3,5,tqm,ftm2/1,d 0.4,0,,2150,1105,45,
l1,2015,2,4,7,qm,ftm1/2,d 1.4,0,,2125,1250,45,
l1,2015,2,4,8,qm,ftm1/2,d 1.4,0,,2125,1335,45,
l1,2015,2,5,4,tqm,ftm2/2,d 1.5,0,,2186,1005,45,
l1,2015,2,5,5,tqm,ftm2/2,d 1.5,0,,2186,1105,45,
l1,2015,2,5,7,qm,ftm1/1,d 1.3,0,,2103,1250,45,
l1,2015,2,5,8,qm,ftm1/1,d 1.3,0,,2103,1335,45,
l1,2015,2,10,4,tqm,ftm2/1,d 0.4,0,,2150,1005,45,
l1,2015,2,10,5,tqm,ftm2/1,d 0.4,0,,2150,1105,45,
l1,2015,2,11,7,qm,ftm1/2,d 1.4,0,,2125,1250,45,
l1,2015,2,11,8,qm,ftm1/2,d 1.4,0,,2125,1335,45,
l1,2015,2,12,4,tqm,ftm2/2,d 1.5,0,,2186,1005,45,
l1,2015,2,12,5,tqm,ftm2/2,d 1.5,0,,2186,1105,45,
l1,2015,2,12,7,qm,ftm1/1,d 1.3,0,,2103,1250,45,
l1,2015,2,12,8,qm,ftm1/1,d 1.3,0,,2103,1335,45,
l1,2015,2,12,11,tqm,ftmt3,d 1.5,0,,2235,1700,45,
l1,2015,2,12,12,tqm,ftmt3,d 1.5,0,,2235,1750,45,
l2,2014,9,12,7,m ii,3bkm2/1t,a110,0,,211,1250,45,
l2,2014,9,12,8,m ii,3bkm2/1t,a110,0,,211,1335,45,
l2,2014,9,13,1,tp,ftmt2,d 1.4,0,,488,730,45,
l2,2014,9,13,2,tp,ftmt2,d 1.4,0,,488,815,45,
l2,2014,9,13,3,m ii,l3fh2,a008,0,,296,920,45,
l2,2014,9,13,4,m ii,l3fh2,a008,0,,296,1005,45,
l2,2014,9,13,5,m,l3fh1,a212,0,,291,1105,45,
l2,2014,9,13,6,m,l3fh1,a212,0,,291,1150,45,
l2,2014,9,16,5,m ii,3bkm2/1t,a110,0,,199,1105,45,
l2,2014,9,16,6,m ii,3bkm2/1t,a110,0,,199,1150,45,
l2,2014,9,16,7,mp,3bkm2/2t,a109,0,,221,1250,45,
l2,2014,9,16,8,tp,ftm1/1,d 1.3,0,,355,1335,45,
l2,2014,9,16,9,tp,ftm1/1,d 1.3,0,,355,1430,45,
l2,2014,9,16,11,tp,ftmt2,d 1.4,0,,478,1700,45,
l2,2014,9,16,12,tp,ftmt2,d 1.4,0,,478,1750,45,
l2,2014,9,16,13,tp,ftmt1,d 1.3,0,,458,1840,45,
l2,2014,9,16,14,tp,ftmt1,d 1.3,0,,458,1930,45,
l2,2014,9,17,3,mp,3bkm2/2t,a109,0,,225,920,45,
l2,2014,9,17,4,mp,3bkm2/2t,a109,0,,225,1005,45,

Freundliche Grüße Kürbis
 
Zuletzt bearbeitet:
vielen Dank für die schnelle Antwort :)
 
mh also leider muss ich passen. Über CSV bin ich war deutlich schlauer geworden, aber das war es leider auch. (zumalen es sich um eine Text Datei.txt handelt).

die Datei ist zumindest mal über Excel sortiert, allerdings stockt es immer noch dabei, wie ich die Datei in Eclipse bzw. meine App bekomme und ich aus der Text Datei nur die gewünschten Informationen erhalte.
 
Nun ja, programieren ist Schritt für Schritt ;-)
Den ersten hast du erledigt, nämlich erstmal zu kapieren welchen Regeln diese Datei folgt (weil das ist zwingend notwendig um was zum einlesen zu programmieren).

Der nächste ist... die Zeilenweise einlesen (Googlen nach "Java Textdatei zeilenweise einlesen" zeigt Codebeispiele). Und dann die Zeilen nacheinander zu verarbeiten (Schleife).
Jede Zeile landet dabei in einer Stringvariablen. Diese musst du dann den Regeln entsprechend aufteilen.

Oder... du gibst "Java CSV" bei Google ein und ziehst dir ne fertige Java lib dafür. Weil so einen langweiligen Blödsinn programmiert man üblicherweise nicht selber ;-)


Also, Schritt für Schritt.

kuerbis schrieb:
(zumalen es sich um eine Text Datei.txt handelt).

Erweiterungen sind irrelevant, der Inhalt zählt.
Wobei es eine Textdatei ist. Genau wie XML und HTML.
Word Dateien sind übrigens auch Textdateien in zip Dateien ;-)

Lass dich also vom Dateinamen nicht ablenken, konzentriere dich auf den Inhalt.

cu
 
Zuletzt bearbeitet:
So habe ein wenig rum geforscht und habe ein simples Beispiel gefunden, allerdings stockt es selbst bei dem.



Code:
import java.io.*;
 
class ReadFile1
{
  public static void main(String[] args) throws IOException
  {
    FileReader fr = new FileReader("test.txt");
    BufferedReader br = new BufferedReader(fr);
 
    String zeile1 = br.readLine();
    System.out.println(zeile1);
    String zeile2 = br.readLine();
    System.out.println(zeile2);
    String zeile3 = br.readLine();
    System.out.println(zeile3);
 
    br.close();
  }
}


allerdings mit folgender Fehlermeldung


Code:
Exception in thread "main" java.io.FileNotFoundException: test.txt (Das System kann die angegebene Datei nicht finden)
	at java.io.FileInputStream.open(Native Method)
	at java.io.FileInputStream.<init>(Unknown Source)
	at java.io.FileInputStream.<init>(Unknown Source)
	at java.io.FileReader.<init>(Unknown Source)
	at ReadFile1.main(ErsteKlasse.java:7)


die Datei heißt bei mir "test" ohne die Endung .txt wobei selbst wen ich die Endung .txt manuel dazuschreibe wird diese Datei nicht gefunden. die Datei habe ich im Selben Ordner gespeichert wie die Java Datei welche auf die Text Datei zugreifen soll.
 
Du überlerlässt es dem Zufall das das Working Directory zufällig richtig ist. Zum testen kannst du das Working Directory abfragen und ausgeben lassen.


Aber generell: Gebe explizit immer den kompletten Pfad an.

kuerbis schrieb:
die Datei heißt bei mir "test" ohne die Endung .txt

Und wie kommst du auf die Idee das das einlesen von "test.txt" die Datei "test" öffnet?

Und evtl. heißt deine Datei "Test.txt"? Das ist was anderes als "test.txt".


Beim programieren musst du exakt vorgehen. Das sieht so ähnlich aus funktioniert da nicht ;-)

cu
 
Zuletzt bearbeitet:
also der Fehler lag weder am Datei Pfad, noch an meiner Endung :biggrin:

mein Problem war,das ich die Text Datei nicht in den Package Explorer gesetzt habe.

kann ich aber nun über befehle mir die Datei auch sortiert anzeigen lassen?

das bekomme ich raus:

Code:
Gs,2014,9,26,6,BFK,1BK2MFE,A309,0,,110,1150,45,

Gs,2014,9,29,1,BFK,1BK2MFE,A309,0,,94,730,45,

z.b. das in dem falle die beiden Zeilen getauscht werden, da die ersten Zeile den Unterricht der 6. Stunde Anzeigt und die Zweite den Unterricht der 1.
 
Es geht alles was du programierst, willst du eine sortierte Ausgabe dann programiere sie.

Aber das ist jetzt völlig unwichtig. Fange erstmal an deine ReadFile1 Klasse zum laufen zu bekommen. Da hast du ja noch viel Arbeit vor dir.

Weil per Copy&Paste da 500 (für jede Zeile der Eingabedatei eines) System.out reinzusetzen ist vermutlich nicht die endgültige Lösung, oder? ;-)

cu
 
würde aber wahrscheinlich schneller gehen wie es anders zu programmieren, da ich nicht weiß, wie. laufen tut es ja, das Problem ist ja lediglich wie ich es von 3 Zeilen auf 500 bzw. 14941 bekomme
 
kuerbis schrieb:
würde aber wahrscheinlich schneller gehen wie es anders zu programmieren,

Nein, das denkt man anfangs gerne. Aber es endet immer damit das man den Kram löscht und nochmal richtig von vorne anfängt.
Und was willst du am Ende in ner Android App mit System.out?

Willst du die Daten im Objekt halten (um sie jederzeit komfortabel abfragen zu können) musst du dir überlegen wie du sie speicherst (Array bietet sich erstmal an).
Dann öffnest du die Datei und liest in einer SCHLEIFE die Zeilen nacheinander ein, nimmst sie auseinander und speicherst sie im Array.

cu

Der ursprüngliche Beitrag von 21:09 Uhr wurde um 21:41 Uhr ergänzt:

Irgendwie habe ich den Eindruck das Projekt ist für deinen aktuellen Erfahrungsstand einwenig zu groß.
Worum geht es überhaupt? Weiß dein Lehrer das man sich in Android Programmierung (das kommt dann ja erst noch) erstmal reinarbeiten muss? Da wirst du noch einige Zeit dran arbeiten ehe das läuft.

Oder soll das Programm am Ende garnicht so clever sein (diese Datei (deren Inhalt sich ja wohl laufend ändert) einlesen und schön anzeigen)? Reicht es evtl. aus der csv Datei ne schöne Webseite zu machen und diese einfach mit in die App einzubauen und anzeigen zu lassen? Also einfach "Aufgabe erfüllt" auch wenn die App dann am Ende nicht wirklich brauchbar ist (weil man sie für einen geänderten Vertretungplan jedesmal ändern müsste).

cu
 
Mein aktueller Wissensstand ist nahezu 0 aber nicht ganz, das war er vor ca. 45 tagen als ich angefangen habe. ja ich weiß, dass diese Aufgabe nicht nur sehr groß ist, sondern nahezu nicht machbar ( da natürlich auch ein Abgabe Termin hierfür vorliegt)doch dessen war und bin ich mir bewusst.
mein Lehrer( dessen Frau selbst bei einer Firma arbeitet welche App´s programmiert) und auch die System Administratoren meiner Schule sind sich ebenfalls im klaren darüber welcher Aufwand dahinter steckt diese App zum Laufen zu bekommen.

Aufgrund dessen ist es so wie du es gesagt hast: Meine Aufgabe ist auch dann erfüllt, wenn keine brauchbare App vorliegt. Es reicht also aus, wenn die Informationen in der aktuellen Text Datei Grafisch in Stundenplan form wiedergegeben werden.

Eine Website ist bereits vorhanden auf welcher der Stundenplan und der Vertretungsplan vorliegen. Hier wird einmal der Vertretungsplan vom Stundenplan getrennt so wie beides nochmals von den Klassen getrennt wird.
Also jede Klasse hat einen eigenen Stundenplan (was ja klar ist) aber auch einen eigenen Vertretungsplan.
Unseren Administratoren liegt einen kombinierte Variante vor, wo der Vertretungsplan schon im Stundenplan integriert ist (so ist auch die Text Datei gestaltet). So gilt es nun also auch die App zu gestalten.

Gestaltet wird Stundenplan und Vertretungsplan von UNTIS
 

Anhänge

  • Stundenplan.png
    Stundenplan.png
    13 KB · Aufrufe: 246
  • Vertretungsplan.png
    Vertretungsplan.png
    8,7 KB · Aufrufe: 223
Hallo Kuerbis,

so würde ich vorgehen:
1. POJO mit den benötigten Werten erstellen. (Getter und Setter nicht vergessen)
2. Die Datei Zeile für Zeile einlesen.
2a. Dabei die Zeilen mit "split" die Zeilen so Teilen, dass die Kommata wegfallen und ein String! Array pro Zeile existiert.
2b. Das Stringarray jeder Zeile durchlaufen und daraus ein Objekt des oben erstellten POJOs unter 1 erstellen.
2c. Dieses Objekt in einer ArrayList<POJO> speichern.

Jetzt hättest du schon mal "alle" Daten in einem Javaobjekt.
Um die Objekte jetzt auf Android anzuzeigen brauchst du leider einen CustomAdapter der an einer Listview hängt.
Dort kannst du auch mittels Collection.sort so sortieren, wie du möchtest. (und es sogar dynamisch sortieren lassen)

Wieviele Tage hast du noch Zeit, damit ich weiß, wie ich dir dabei helfen kann?
 
das in meinen Augen gute, Abgabe ist der 14.04.2015. Also ein wenig Zeit bleibt noch.
Das weniger gute: POJO? wie erstelle ich dies?
das Zeilenweise einlesen funktioniert, aber momentan für 3 Zeilen, ich brauche es für nahezu 15.000 Zeilen.
 
Ich habe auch so eine App programmiert und ich habe dafür eine While-Schleife verwendet.

Für die auswertung verwende ich einen StringBuilder. Dem kann man dann ganz einfach sagen, dass er z.B. dass erste Komma durch "Lehrer: " ersetzt.
Dann dürfte dass eigentlich kein großes Problem mehr sein.

Du kannst dich ja auch mal über den StringBuilder schlau lesen (.txt müsste davor noch natürlich in einen String umgewandelt werden).

Das ganze ist zwar jetzt ein anderer Lösungsansatz als bei den anderen, aber bei mir funktioniert er gut.
 
Hallo Chris39,

dein Ansatz gefällt mir nicht.
Das Warten des Codes ist meiner Meinung nach viel schwieriger. Zwar hast du es vielleicht schneller runterprogrammiert, aber von der Architektur finde ich ein Model/View/(Controller)-Ansatz besser.

@Kuerbis: Das ist noch genug Zeit, dass wir es gemeinsam hier schaffen können.

POJO steht für PlainOldJavaObject. Plain Old Java Object
Dieses POJO werden wir als Model benutzen.

Dabei halten wir uns an deine Beschreibung:
Zitat:
Lehrer, Jahr, Monat, Tag, Stunde, Fach, Klasse, Raum

public class Lesson {

//Lehrer, Jahr, Monat, Tag, Stunde, Fach, Klasse, Raum
Integer id;

String teacher;

Date lessonDate;

Integer lessonHour;

String subject;

String course;

String room;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getTeacher() {
return teacher;
}

public void setTeacher(String teacher) {
this.teacher = teacher;
}

public Date getLessonDate() {
return lessonDate;
}

public void setLessonDate(Date lessonDate) {
this.lessonDate = lessonDate;
}

public Integer getLessonHour() {
return lessonHour;
}

public void setLessonHour(Integer lessonHour) {
this.lessonHour = lessonHour;
}

public String getSubject() {
return subject;
}

public void setSubject(String subject) {
this.subject = subject;
}

public String getCourse() {
return course;
}

public void setCourse(String course) {
this.course = course;
}

public String getRoom() {
return room;
}

public void setRoom(String room) {
this.room = room;
}

@Override
public String toString() {
return "Lesson{" +
"id=" + id +
", teacher='" + teacher + '\'' +
", lessonDate=" + lessonDate +
", lessonHour=" + lessonHour +
", subject='" + subject + '\'' +
", course='" + course + '\'' +
", room='" + room + '\'' +
'}';
}
}

Der nächste Schritt ist dann das Parsen jeder Zeile deiner Datei und das erstellen der ArrayList.

Hier ein wenig Pseudocode:
Lese Datei ein
-- Für jede Zeile
-- -- Splitte den String mit split(",")
-- -- Erstelle ein Lessonsobjekt mit new Lesson();
-- -- Iteriere durch das Splitarray
-- -- Für jedes Element im Splitarray
-- -- -- Setze den Lehrer mit setTeacher(splitarray[0]);
-- -- -- Setze alle anderen Felder
-- -- Füge das neue Lessonsobjekt eine ArrayListe mit add(object) hinzu.
-- Arrayliste mit allen Objekten zur weiteren Verarbeitung vorhanden.


Du kannst ja jetzt versuchen das zu programmieren.
Ich versuche morgen früh das nächste Stück Code zu erstellen.
Kennst du dich mit GIT oder ähnlichem aus? Dann könnten wir ein öffentliches Repository machen und so gemeinsam an deinem Projekt arbeiten.

P.S.: 12000 Zeilen sind schon ziemlich viel. Ich weiß nicht, ob wir genug Speicher dafür bekommen. Sehr wahrscheinlich müssen wir später auf eine Datenbank zugreifen. Aber wir können es ja erstmal mit 1000 probieren.
 
wow das sieht ja schon mal klasse aus. Momentan zeigt mir dein Code Fehler auf, werde mich nachher und Morgen mal ransetzten und das Prüfen und nach den Schritten schauen, welche du mir gegeben hast. ich sage schon mal vielen Dank und gebe hier trotzdem mal meinen Code an den ich gefunden habe und angepasst habe. mit ihm kann ich binnen 4 sec die gesamte Datei einlesen und ausgeben.

Code:
import java.io.*;

class Forum
{
  public static void main(String[] args) throws IOException
  {
    FileReader fr = new FileReader("RBS Stundenplan kürzel orginal.txt");
    BufferedReader br = new BufferedReader(fr);

    String zeile = br.readLine();

    while( zeile != null )
    {
      System.out.println(zeile);
      zeile = br.readLine();
    }

    br.close();
    fr.close();
  }
}
 
Hi,

wenn dir mein Code schon Fehler zeigt und du die fehlenden Imports nicht siehst, dann könnte eine weitere Zusammenarbeit schwer werden.
Ich habe gehofft, du hast schon ein wenig Java-Kenntnisse.

Dann fangen wir mal grundlegend an.
Du hast in deinem Code ein normales Java-Konsolen-Programm.
Hast du schon mal ein Androidprojekt erstellt?
Bitte lad dir die Version 1.0.x von Android Studio runter und erstell ein neues Projekt.
Wenn du "Blank"-Activity beim Erstellen auswählst, wird ein HelloWorld-Projekt mit nur einer Activity erstellt.

Wenn du diesen Satz auf deinem Handy/Tablet angezeigt bekommst, dann meld dich hier wieder, dann machen wir mit dem Model/View/Controller weiter.
 
ich Hatte bis gestern das Buch "Java für die Android-Entwicklung für Dummies" ausgeliehen. die gesmaten beispiele waren hier mit "Eclipse". mit Hilfe des Buches habe ich eine "HelloWorld App" erstellt, eine "HelloWorld App" mit einem Button und mit Hilfe des Internets/Youtube habe ich eine HelloWorld App mit einem Seitenwechsel erstellt (innerhalb der letzten 8 Tage).Also ja, ich habe schonmal ein Android Projekt erstellt ;). Ist es notwendig auf " Android Studio" umzustellen?

seit heute liegen mir nun 2 andere Bücher vor:

1. Android 3 Apps entwickeln mit dem Android SDK
2. Java 7 Komplettes Starterkit für den erfolgreichen Einstieg in die Programierung

Melde mich hiermit auch zurück da ich die Apps erfolgreich auf mein Handy bekommen habe ( mit Eclipse).
 
Hallo Kuerbis,

leider ist Google/Android sehr dynamisch.
Nach meinem Wissen nach, wird Eclipse nicht mehr zu 100% unterstützt.
Auch werde ich das Projekt mit dir parallel implementieren. Nur leider benutze ich Android Studio 1.0.x. Wenn du mal einen Stand haben möchtest, dann wirst du ihn nicht auf eclipse laufen lassen können. Zwar kann man das Projekt dann importieren, aber ein migrieren wird meiner Meinung nach für dich zu schwer sein.

Aber du kannst natürlich eclipse benutzen.

So, jetzt wollen wir die Datei mit Android einlesen.
Dafür erstell einen Ordner mit dem Namen "assets" direkt neben "res" und "java".
In diesen Ordner kopierst du deine Datei mit den Zeilen.
Ich habe jetzt die paar Zeilen aus deinem ersten Post genommen und die Datei "file.csv" genannt.

In deiner MainActivity holst du jetzt die Datei aus dem Assetsordner, ließt sie ein und gibst die Zeilen erstmal nur im Logcat aus.

Hier ist meine onCreate-Methode:
Code:
public static String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        try {

            BufferedReader br = new BufferedReader(new InputStreamReader(getAssets().open("file.csv")));
            String zeile = br.readLine();

            while( zeile != null )
            {
                Log.i(TAG, zeile);
                zeile = br.readLine();
            }

            br.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

@All: Ich weiß, dass man dieses Thema auch in PMs ausgliedern könnte, aber ich würde das gerne im Forum öffentlich haben, falls es ein anderer Programmierer als Tutorial benutzen möchte.
 
Zuletzt bearbeitet:

Ähnliche Themen

H
Antworten
2
Aufrufe
1.310
Hcman
H
R
  • Robby1950
2
Antworten
23
Aufrufe
1.015
Robby1950
R
Manny87
  • Manny87
Antworten
11
Aufrufe
165
swa00
swa00
Zurück
Oben Unten