Arrayliste mit einem String vergleichen

edited December 2015 in Questions about Code

Hallo zusammen. ich möchte gerne eine Arrayliste mit einem String vergleichen. In meinem Programm wird eine Kunden Nr. in einer Arreyliste eingetragen, diese möchte ich gerne beim eingeben einer Alten oder Neuen Kunden Nr. mit der Liste vergleichen ob sie schon vorhanden ist oder neu angelegt werden muss. Meine Daten im Programm werden inkl. der Adress Daten gespeichert und ich möchte gerne wenn ich eine Kunden Nummer eingebe überprüfen ob der Kunde schon vorhanden ist oder neu ist. wenn er vorhanden ist sollen auf Grund der Kunden Nr. worunter der Kunde gespeichert ist die Daten geladen und angezeigt werden. Wenn er neu ist der Kunde soll ein Adressfeld geöffnet werden und die Adresse dann gespeichert werden. Ich komme aber mit der ArrayList nicht zu Potte. Da ich in den Referenzen nicht ersehe wie ich es anstellen muss um zu vergleichen. Ich habe einmal ein Sketch schnipsel angehangen wie ich es gedacht habe, aber so klappt das nicht.

void adressfelder(){

    textFont (TEXT, 12);
    text(kdnr,770,100);// das ist die eingegebene kdnr
    ad5 = new ArrayList();

    if (ad5.equals(kdnr) == false) {
        ad5.add(kdnr);// vergleich Anfang
    } else {
        String merker[] = loadStrings("Kunden/"+kdnr+"/"+kdnr+" einstellungen.txt");
        textFont (TEXT, 12);
        text(kdnr,770,100);  
        textFont (TEXT, 16);
        text(ad1,770,135); // Adress Ausgabe
        text(ad2,770,175); 
        text(ad3,770,215);
        text(ad4,770,255); 
        text("gleich"+kdnr,250,70);// test ob wahr oder unwahr
    }
}

Ich hoffe Ihr versteht wie ich das meine.......

Answers

  • edited December 2015 Answer ✓
    // forum.Processing.org/two/discussion/14017/arrayliste-mit-einem-string-vergleichen
    // 2015-Dec-16
    
    import java.util.List;
    
    final List<String> myTexts = new ArrayList<String>();
    String someText = "I'm a string!";
    
    myTexts.add(someText);
    println(myTexts);
    
    // Condition below won't ever happen b/c lists aren't strings:
    if (myTexts.equals(someText))  println("Strings aren't lists!!!");
    
    if (myTexts.get(0).equals(someText))
      println("Index 0 string within the list = string from variable someText.\t(^_^)");
    
    exit();
    
  • Ich danke Dir für diese schnelle Hilfe, GoToLoop

  • Answer ✓
    // forum.Processing.org/two/discussion/14017/arrayliste-mit-einem-string-vergleichen
    // 2015-Dec-16
    
    
    ArrayList<String> myTexts = new ArrayList<String>();
    
    void setup() {
    
      myTexts.add("Meier");
      myTexts.add("Schmidt");
      //myTexts.add("Werner");
      myTexts.add("Schulze");
      myTexts.add("Dietrich");
    
      println(myTexts);
    
      noLoop();
    }
    
    void draw() {
      println ("Bach " + arrayListContainsString("Bach"));
      println ("Schmidt " + arrayListContainsString("Schmidt"));
    
      if (arrayListContainsString("Schmidt")) {
        println ("show Schmidt data");
      } else {
        println ("ADD Schmidt data");
      }
    }
    
    boolean arrayListContainsString (String s1) {
      for (String testString : myTexts) {
        if  (testString.equals(s1))
          return true; // yes, contains
      } // for 
      // after the for-loop
      return false; // no
    }
    //
    
  • maybe you could even work with HashMap of integer/ KundenNummer PLUS ein Objekt einer Klasse Kunde

    wenn du objekt orientierte Programmierung (OOP) kannst

    ein Tutorial dazu: https://www.processing.org/tutorials/objects/

    mit Table kannst du komfortabel auch Kundendaten in einer csv Datei speichern

    du findest alles in der Referenz

    https://www.processing.org/reference/

  • @Chrisir, all List containers got method contains() already:
    http://docs.Oracle.com/javase/8/docs/api/java/util/List.html#contains-java.lang.Object-

    println("Is Bach already in the List?:\t" + myTexts.contains("Bach"));

  • edited December 2015

    BtW, I highly recommend Processing's StringList over Java's List<String>. :-bd
    https://Processing.org/reference/StringList.html

  • Answer ✓
    // forum.Processing.org/two/discussion/14017/arrayliste-mit-einem-string-vergleichen
    // 2015-Dec-16
    
    import java.util.Map;
    
    // Note the HashMap's "key" is a String and "value" is an Integer
    HashMap<Integer, Kunde> hm = new HashMap<Integer, Kunde>();
    
    void setup() {
    
      Kunde a1= new Kunde (0, "Christian", "Meier", "Mehrweg 5", "32732", "München", "Deutschland", "DE943285r43", "Deutsche Bank");
    
      add (a1.Kundennummer, a1); 
    
      // noLoop();
      add (0, null);
    }
    
    void draw() {
      //
    }
    
    
    // ------------------------------------------------
    // other functions 
    
    void add(int wordLocal, Kunde a1) {
      // add a word or when it's already there increase the counter 
    
      // is it new? 
      if (!hm.containsKey(wordLocal)) {
        // new one 
        // Putting key-value pairs in the HashMap
        // we need a way to set a1 here (input felder) 
        hm.put(wordLocal, a1);
      } // if 
      else {
        // old one : 
        // We can access values by their key
        Kunde val = hm.get(wordLocal);
        val.display();
    
        //val++;
        // Putting key-value pairs in the HashMap
        //hm.put(wordLocal, val);
      } // else
    }
    //
    
    // ======================================================
    
    class Kunde {
    
      int Kundennummer=0; 
      String Vorname, Nachname, StrasseHausnummer, PLZ, ORT, Land;
    
      String IBAN;
      String Bank; 
    
      // constr 
      Kunde(int Kundennummer_, 
        String Vorname_, String Nachname_, 
        String StrasseHausnummer_, 
        String PLZ_, String ORT_, 
        String Land_, 
        String IBAN_, 
        String Bank_ )
      {
    
        Kundennummer=  Kundennummer_; 
        Vorname = Vorname_;
        Nachname = Nachname_;
    
        StrasseHausnummer = StrasseHausnummer_;
    
        PLZ = PLZ_; 
        ORT = ORT_;
        Land = Land_;
        IBAN=IBAN_;
        Bank=Bank_;
      } // constr 
    
      void display() {
        println (Vorname + " "+Nachname);
        println (StrasseHausnummer);
        println (PLZ + " "+ORT);
      }
    
      //
    } // class 
    
    //
    
  • edited December 2015

    For StringList, use hasValue() in place of List's contains():
    https://Processing.org/reference/StringList_hasValue_.html

    However, If that's not enough, and we also wanna know the index of that String inside the StringList, use its "hidden" method index() instead:
    https://GitHub.com/processing/processing/blob/master/core/src/processing/data/StringList.java#L438

  • Danke Chrisir, für die Tutorials, das mit den cvs Dateien mache ich ja schon und es ist eine feine Sache. Mir ging es im Grunde darum, weil ich das noch nie gemacht habe. Die abgespeicherten Adress Daten , sobald ich eine Kunden Nr. eingebe kontrollieren zu lassen, so das wenn es eine neue Kunden Nr. ist ein Datenfeld aufgerufen wird in welchem ich die neue Adresse eintragen kann, das ist aber auch nicht das Problem. Das Problem ist wenn ich eine Kunden Nr. eingebe , wie muss ich es handhaben das wenn die Kunden Nr. mit der gespeicherten Datei übereinstimmt diese dann zu laden. Das Laden ist schon Klar, nur die Kontrolle nicht. Aus diesem Grunde wollte ich eine Arrayliste erstellen in der alle Kunden Nr. gespeichert werden und diese bei Eingabe einer Kunden Nr. vergleichen lassen. Wenn sie vorhanden ist soll die Kunden Datei geladen werden , wenn sie nicht vorhanden ist neu erstellt werden. Nur ich finde das ist dann Doppelt gemoppelt. man müsste doch auch nach den gespeicherten Datei namen suchen können um fest zu stellen ob der Kunde schon erfasst ist oder neu angelegt werden muss.

    String merker[] = loadStrings("Kunden/"+kdnr+"/"+ad5+" einstellungen.txt");

    so wird die Kunden Datei bei mir aufgerufen wenn sie schon gespeichert ist. Kunde= Haupt Ordner Kdnr = Unter Ordner ad5 = kunden Einstellungen.

    saveTable(table, "Kunden/"+kdnr+"/"+kdnr+" excel kompl.csv");

    so werden die Formatierten cvs Dateien gespeichert,

    das ist schon alles soweit in Ordnung, lediglich mit dem Vergleichen der gespeicherten Kunden Daten (einstellungen.txt) haperts etwas. aber ich Danke Dir für Deine Anregungen und Hilfe.

    l.G.Jürgen

  • Answer ✓

    Du kannst natürlich prüfen, ob eine Datei bzw. ein Ordner bereits existiert. Hier ist ein Beispiel:

    Of course you can check if a file/folder exists. Here is an example:

    void setup() {  
      String folder = dataPath("customer_12345");
      String filename = "12345.csv";
    
      // check if folder exists
      File f = new File(folder);
      if (f.exists() && f.isDirectory()) { 
        println("the folder " + folder + " exists.");
      } else {
        println("the folder " + folder + " does not exist.");
      }
    
      // check if file exists
      f = new File(folder+"/"+filename);
      if (f.exists() && !f.isDirectory()) { 
        println("the file " + folder + "/" +filename + " exists.");
      } else {
        println("the file " + folder + "/" +filename + " does not exist.");
      }
    }
    
  • Danke benja , das habe ich gemeint, ich wusste nur nicht wie ich das anstellen sollte. Aber das ist genau das was ich brauche um die Kunden Einstellungen die in den Ordnern stehen zu

  • benja, ich habe das jetzt so erstellt nach Deinem Beispiel.

    ` void adressfelder(){ String folder = dataPath("Kunden/"); String filename = " einstellungen.txt";

     textFont (TEXT, 12);
     text(kdnr,770,100);  
    

    File f = new File(folder+"/"+kdnr);//ab hier kontrollieren/ Daten ausgeben if (f.exists() && f.isDirectory()) { text(ad1,780,135); text(ad2,780,175); text(ad3,780,215); text(ad4,780,255); } else {

     if ((key == 89) || (key == 121)){no+=40;start=3;}// ab hier neu schreiben
     if (( int(key) >= 32) || (int(key) <= 120)){
       ad1=ad1+key ;text(ad1,780+1*20,135+no);// noch in Arbeit
     }
     } 
     textFont (TEXT, 16);
    }
    

    `

    das geht super Dank Deiner Hilfe.

  • Hast du pro Kunde eine csv Datei? Das ist nicht effektiv. Du hast dann viele Plattenzugriffe, die sehr zeitaufwändig sind.

    Besser nutze table, einmal komplett laden, bei programmende speichern

  • Chrisir, das geht aber nicht anders, da mit den Daten jeweils die Schliess Nr. gespeichert werden. so das die cvs Datei als Lieferschein gedruckt werden kann. Bei Nachbestellungen von Schlössern, wird die datei wieder aufgerufen also geladen und die Daten werden übernommen, so das die Folgeschliessungen wenn z.B. die letzte Schliess Nr. 3314 ist die Folgeschliessungen bei 3320 weiter berechnet werden. Ich habe in Grunde für jeden Kunden 3 cvd Dateien. 1 beinhaltet die kompletten Schliessungen, die 2. beinhaltet die Folgeschliessungen und in der 3. sind die Folgeschliessungen gemischt als Lieferschein für den Kunden. Dann habe ich noch eine normale txt Datei darin sind die ganzen Daten wie Kdnr, Adresse, Einstellungen für das Programm ob bei den Berechnungen was ausgeschlossen werden soll, wie 3 gleiche Zahlen nebeneinander oder Nullen nebeneinander u.s.w. das muss sein, da die Schlösser in der Spezial Abteilung von Hand zusammen gesetzt werden und die Plättchen die dort eingesetzt werden für die Schliessungen unterschiedlich sein müssen, sonst gibt es Probleme bei den Schlüsseln. Denn es gibt immer 1 Hauptschlüssel, der alle Schlösser schliesst und die anderen Schlüssel dürfen nur ein bestimmtes Schloss schliessen oder die Schlösser die durch die Schliessung bestimmt wird. Wenn ich einen Kunden gespeichert habe, muss mir das Programm bei dem nächsten Kunden den ich eingebe zeigen ob er neu ist, also die Kdnr schon vorhanden ist oder nicht. Wenn ja werden die Kunden Daten geladen und das Programm erstellt laut der Daten eine Folgeschliessung, Wenn nein werden die Daten eingegeben und es wird eine erste Schliessung erstellt. Es sind ca 1500 Kunden erfasst, die schon eine Schliessanlage haben und so wie ich es nach dem Beispiel von benja gemacht habe, geht es schnell wenn das Programmauf der Festplatte sucht. Ich wollte ja auch erst eine Arrayliste erstellen mit den kdnr, aber die muss ich doch auch speichern und laden. Also mit den Festplatten zugriffen kann ich leben. :-)

    l.G.Jürgen

  • Answer ✓

    Alles klar

  • Hallo, ich habe noch einmal eine Frage zu Processing. Mein Programm steht soweit und ich habe um die Adress Daten ein zu geben in meinem Programm eine Funktion eingebaut , sobald ich die Kunden Nr eingegeben habe , sucht das Programm im Ordner data nach der Kunden Nr. (wie schon beschrieben) sollte die Kunden Nr nicht vorhanden sein wird ein Fenster geöffnet wo ich die neuen Kunden Daten eingebe. dazu habe ich mir eine Virtuelle Tastatur erstellt die mit der Mouse bedient wird. Da ich auf der Tastatur aus Platz Gründen nur die Zahlen, Kleinbuchstaben und Umlaute sowie einige Sonderzeichen (- / &) untergebracht habe, wäre es schön wenn es zu machen wäre , das ich eine Taste der Virtuellen Tastatur so belegen könnte, das ich umschalten kann auf Groß Buchstaben, so das ich bei der Eingabe von Namen, Strasse u.s.w. den ersten Buchstaben Groß schreiben kann. Dann wäre noch eine Frage, ich möchte gerne wenn die Schliessungen erstellt wurden und abgespeichert wurden die cvs Dateien ausdrucken, wenn möglich aus dem Programm raus, Gibt es in Processing eine Möglichkeit oder einen Befehl um die Dateien ausdrucken zu lassen? So sieht das Programm bisher aus, ich habe einmal ein 3 Screenshot angehangen. Bild1 Startbildschirm Bild2 Eingabebildschirm für neuen Kunden Bild 3 Eingabebildschirm für Schlissungen.

    2015-12-19 2015-12-19 (1) 2015-12-19 (2)

  • Answer ✓

    Super!

    Machst du das für eine Firma im Auftrag? Oder privat?

    Für die Tastatur: eine weitere Taste shift und dann ändert sich die Belegung der Tasten.

    Fürs Drucken: schau mal, ob du eine pdf erzeugen kannst. Oder du kannst es als csv speichern und dann über word drucken

  • Privat für meine Frau, die ist bei Burgwächter, das ist eine Fa. die Schliessanlagen, Tresore u.s.w. herstellt. Das ist eine Fa. die nicht vel investiert und meine Frau leitet die Spezialabteilung, die Stellen Schliessanlagen her aber nicht für Wohnungen sonder Vorhängeschlösser als Schliessanlagen. Das Programm wo die mit arbeiten hat einmal ein Meister vor Jahren in Excel erstellt und wenn meine Frau das benutzt dann muss sie jedesmal erst die Schliessnummern im Kopf errechnen dann in Excel eingeben , berechnen lassen und von Hand Mischen und das fand ich sowas von veraltet. Da habe ich Ihr den Vorschlag gemach das ich Ihr das Programm in Processing erstelle und es Ihr auf einen Stick ziehe, so das im Grunde das von Kopf ausrechnen der Schliessnummern entfällt. Aber Du weist ja bestimmt selber, wenn man dann einmal da dran sitzt dann fällt einem so viel ein was man noch machen könnte. Die speichern noch nicht einmal die Daten der schliessungen und müssen dann immer von Hand kontrollieren welche Schliessungen der Kunde schon hatte. Jetzt mache ich meiner Frau das Programm so das Sie weniger Arbeit beim erstellen der Schliessungen hat in Ihrer Abteilung.

  • Ja ich versuche es mal mit dem erstellen von Pdf das würde mir gefallen, aber da muss ich mich mal erst einlesen, das begreife ich noch nicht so richtig. Ich hatte mir schon so etwas gedacht mit Shift, ich habe extra eine Taste frei gelassen.

  • Answer ✓

    Und bei shift dann ein boolean setzen / grossschreibungIstAn - dann je nach Wert a oder A senden

  • Das mit dem über Word drucken, das geht ja jetzt schon, aber mir würde es besser gefallen, wenn ich das mit Pdf hinbekommen würde und aus dem Programm raus drucken könnte. Aber da mache ich mir keine großen Gedanken, irgend wie werde ich schon eine Routine hin bekommen, das es geht. Danke nochmal für Deine Hilfe.

  • So statt SHIFT habe ich für die Mouse eine bessere Lösung gefunden für die Groß und Kleinschreibung in der Adresszeile. und zwar schalte ich einfach die 2 Moustasten links für Kleinbuchstaben und rechts für Goßbuchstaben mit:

    if (mouseButton == RIGHT){ad1=ad1+alpha[zz].toUpperCase();fill(0);text(ad1,nspalte,nzeile);}else{ad1=ad1+alpha[zz];fill(0);text(ad1,nspalte,nzeile);}}}

  • Answer ✓

    https://forum.Processing.org/two/discussion/8045/how-to-format-code-and-text

    Shorter version: *-:)

    ad1 += mouseButton == RIGHT? alpha[zz].toUpperCase() : alpha[zz];
    fill(0);
    text(ad1, nspalte, nzeile);
    
  • Hallo, ich habe da noch einmal eine Frage. Da die Programmierung für mein Schliesanlagen Programm ziemlich Groß geworden ist und so langsam beim Fehler suchen unübersichtlich wird, habe ich die einzelnen Funktionen in Tabs gepackt. Das ist auch so in Ordnung, das Programm läuft. Jedoch habe ich festgestellt, das wenn ich die Funktion zum Speichern aufrufe, alles gespeichert wird nur die Kunden Nr wird nicht mit in dem Tab mit dem Namen excel übernommen. alles was sich auf die kdnr bezieht wird nicht gespeichert also in der csv Datei angezeigt. Da ich die csv Dateien unter

    ` saveTable(table1, "data/Kunden/"+kdnr+"/"+kdnr+" excel folge.csv");

    ` abspeicher wird mit in den Ordnern data/Kunden+kdnr die csv Datei mit der Kunden Nr angezeigt, jedoch jetzt wo die Speicherfunktion in einem eigenen Tab ist wird die Kunden Nr nicht mehr angezeigt, wie kann ich das beheben.

  • das sollte nicht passieren - alle tabs liegen im gleichen Ordner!!!!!

    vielleicht weiss @benja Rat

    kennst du diese Funktion:

    println(dataPath(""));

    vielleicht hilft es, wenn du den data Pfad speicherst; ersetze die \ mit /

  • Sorry, hab ich jetzt auch keine Ahung woran das liegen kann. Eigentlich sollte es keinen Unterschied machen, ob du deinen Code in Tabs aufteilst oder nicht. Processing behandelt das eigentlich so, als stände alles untereinander. Vielleicht ist beim Kopieren ein Fehler passiert?

  • Dass die Fehlersuche mittlerweile schwierig wird kann ich mir gut vorstellen. Habe noch eine frühe Version deines Programms im Kopf, die kam mir auch schon recht kompliziert vor. Wenn ich mir vorstelle, was da mittlerweile alles dazu gekommen sein muss, möchte ich nicht tauschen :)

    Auch wenn das vielleicht komisch klingt würde ich dir vielleicht raten, jetzt nochmal komplett von vorne zu beginnen. Mit allem was du inzwischen gelernt hast, sollte es dir leichter fallen, den Code übersichtlich und sinnvoll zu strukturieren. Das wäre zwar jetzt erstmal ein zusätzlicher Aufwand, aber ich glaube das holt man wieder rein, wenn man sich bei künftigen Änderungen leichter tut.

    Ich glaube du hattest bisher keine Klassen verwendet, das bringt bei größeren Projekten eine Menge Vorteile.

    Wenn du magst kannst du den Code ja nochmal komplett posten oder irgendwo hochladen, wenn ich Zeit habe, schau ich gerne mal drauf, ob mir Stellen auffallen, wo man noch optimieren kann.

  • edited December 2015

    Nein Chrisir, die Funktion println(dataPath("")) kannte ich noch nicht, was bewirkt diese, kann man damit den Path auslesen? Ich weis auch nicht was das mit der Übernahme der Variabel auf sich hat es wird ja alles abgespeichert, lediglich in dem Ordner und Dateinamen fehlt die kdnr. Das blöde ist, das ich kein Englisch kann und die Übersetzungen so miserabel sind. ich habe irgend etwas gelesen mit Statischen Variablen das es da Schwierigkeiten gäbe. Naja ich werde es schon irgendwie raus finden, Danke für Euer Interesse. Ich habe doch kein Backslash sondern den Schrägstrich bei der Speicherung.

    ` saveTable(table1, "data/Kunden/"+kdnr+"/"+kdnr+" excel folge.csv");

    `

  • Sorry Chresir und benja, Den Fehler habe ich selbst verursacht, ich habe einen Button zum abspeichern erstellt und der wird über die Mouse bedient. da habe ich vor dem Abspeichern die Variabeln die nicht mehr fürs Programm Relevant sind auf 0 gesetzt und habe ausversehens die Kunden Nr. auch auf kdnr=""; gesetzt, das kann ja nicht gehen, den dann wird der String ja als Leer gespeichert, jetzt gehts wieder. Mit dem tab`s ist eine schöne Sache, da muss man nicht so ein Ellen langes Programm kontrollieren man hat dann jede Funktion besser unter Kontrolle. :-)

  • benja ich habe da noch ein Problem mit dem laden der Kunden Daten. Ich habe das folgendermaßen aufgebaut:

    void adressfelder(){
     String folder = dataPath("Kunden/"+kdnr);
     String filename = kdnr+"einstellungen.txt";  
    
         textFont (TEXT, 14);
         text(kdnr,620,100); 
         start=3;
    
         fill(255);
         rect(500,55,920,245);   
         fill(0);// Adressfelder
    
    
         // **-----  Das wird ausgeführt und auch richtig**
    
        File f = new File(folder);
        if (f.exists() && f.isDirectory()) {text("Kunde vorhanden",620,295);
        }else{fill(#FF0000); text("Kunde nicht vorhanden",620,295);fill(0);}
    
        //**---------------------------angezeigt wenn vorhanden oder nicht**
    
    
        //**---- ab hier ist ein Fehler drin , die Daten werden nicht geladen**
    
     // check if file exists
        f = new File(folder+"/"+filename);
        if (f.exists() && !f.isDirectory()) {  
    
        String merker1[] = loadStrings(kdnr+"einstellungen.txt");
    
        ad1=merker1[13];ad2=merker1[14];ad3=merker1[15];ad4=merker1[15];
        text(ad1,620,135); 
        text(ad2,620,175); 
        text(ad3,620,215);
        text(ad4,620,255); 
    
        } else {      
    
       text(ad0,620,80);
       text(kdnr,620,100);     
       for (int i=0; i<4; i++){
       text(data0[i],550,140+i*40);}
    
       fill(255);
       for (int i=0; i<4; i++){
       rect(620,120+i*40,340,20);}  
    
      fill(111);
      for(int i=0;i<=9;i++){
        fill(111);
      rect(965+i*40,80,20,20);
      rect(965+i*40,80+40,20,20);
      rect(965+i*40,80+80,20,20);
      rect(965+i*40,80+120,20,20);
      rect(965+i*40,80+160,20,20);
    
    
       fill(255);
      text(alpha1[i],970+i*40,95);
      text(alpha1[i+10],970+i*40,135);
      text(alpha1[i+20],970+i*40,175);
      text(alpha1[i+30],970+i*40,215);
      if (i+40 == 49){fill(#FF0303);text("Gr",967+i*40,255);fill(255);}else{
      text(alpha1[i+40],970+i*40,255);}      
      }
    
      fill(#5A4E4E);
      rect(960,280,160,20);
      fill(#FF0000);
      rect(880,280,60,20);
      rect(1140,280,60,20);
      rect(1210,280,60,20);
      rect(1280,280,60,20);
      fill(255);
      text("Save",890,295);
      text("Leertaste",1000,295);
      text("ENTER",1145,295);
      text("RESET",1215,295);
      text("EXIT",1290,295);
    
     textFont (TEXT, 14);
    
      }  
    
      }
     //------------------------------------------------------------
    

    könntest Du einmal darüber schauen was ich Falsch mache. Bei der Kontrolle der Ordner, gibt das Programm mir an ob der Ordner vorhanden ist oder nicht, nur bei dem laden macht das Programm nichts. Das Programm sollte bei der 2. If Abfrage wenn der Kunde vorhanden ist, die Daten auf dem Display anzeigen und wen nicht "tritt else ein " und es werden die Adress Felder und die Virtuelle Tastatur angezeigt so das man die Adress Daten eingeben kann. es werden aber immer nur die Adress Felder und die Virtuelle Tastatur aufgebaut obwohl der Kunde vorhanden ist. Und ich habe noch die Frage, wie machst Du deinen geposteten Code farbig :-)

  • Answer ✓

    Ausprobieren kann ich das jetzt nicht, aber ich vermute mal hier liegt der Fehler:

    String merker1[] = loadStrings(kdnr+"einstellungen.txt");

    Da ist jetzt nichts mehr von deiner Ordnerstruktur übrig. Versuchs mal so:

    String merker1[] = loadStrings(folder+"/"+filename);

    Und als Tipp: Benutze ruhig mehr Kommentare, das hilft enorm, auch für einen selbst, wenn man sich das mit etwas Abstand nochmal anschaut.
    Und die Auto-Formatierung ist auch eine gute Sache um etwas mehr Ordnung in den Code zu bekommen (Strg+T oder CMD+T)

  • Ich habe es so probiert,das gleiche Ergebnis. Also bei der Path angabe ist alles OK, das Programm sagt mir das der Path stimmt und bis zum letzten Ordner erkannt wird. Doch beim Laden der Datei: einstellungen.txt, obwohl die Datei mit den Oben angegebenen Path gespeichert werden, erkennt er die Datei nicht zum laden. Ich habe schon alle Varianten ausprobiert, doch Ohne Erfolg.

  • edited December 2015

    Schonmal versucht den Pfad erst in einem String zu speichern und dann in der Konsole auszugeben? Also sowas wie:

    String filePath = folder + "/" + filename;
    println(filePath);
    

    Und die Ausgabe dann mit dem tatsächlichen Pfad vergleichen. Mehr kann ich da jetzt nicht machen, habe ja die Ordnerstruktur nicht und auf Anhieb sehe ich keinen offensichtlichen Fehler mehr.

  • edited December 2015

    Also benja, ich habe es hin bekommen mit dem Laden aus Unterordner. Man muß beim laden aus den Unterordnern den kompletten Windows Path angeben, dann gehts einwandfrei.

    String adress[] = loadStrings("C:/Users/admin/Desktop/processing-3.0.1/processing/Schliessanlagen_v01_3_1/data/Kunden/"+kdnr+"/"+kdnr+" adressen.txt");

  • Ja habe ich alles schon versucht, aber das geht nicht, Dann habe ich im Netz eine Seite gefunden wo es erklärt wird. Solange die Datei nur im data Ordner steht ist alles ok, nur sobald im data Ordner Unterordner erstellt werden muss man den kompletten Windows Path eingeben, Nur da ich kein Englisch kann ist das für mich immer eine Tortur , die Übersetzungen von Google sind auch nicht so Pralle. Aber irgend wie klappt es ja dann doch, Aber ich danke Dir für Deine Bemühungen.

  • So jetzt habe ich es so wie es sein soll, jetzt kann das Programm auch auf einen anderen PC mit einem anderen Path laufen.

    String adress[] = loadStrings(dataPath("Kunden/"+kdnr+"/"+kdnr+" adressen.txt"));

Sign In or Register to comment.