text-Datei einlesen und den Inhalt als Variable nutzen

Das beste wäre, wenn Du deine Daten daran anpassen könntest. Häufig ist das jedoch nicht möglich.
Guten morgen, Ulrich.

Bevor ich mir das Thema CSV anschaue, muss ich diese Sache erstmal zu Ende bringen.

Je intensiver man sich mit einer Sache auseinander setzt, desto mehr erkennt man, was eigentlich alles dahinter steckt. Unglaublich. Das Thema vCard ist schwierig, wohl aufgrund der vielen Schreibweisen von Adressen. Von den Formaten für Telefonnummern mal ganz zu schweigen.

Also, ich bin ja Mac-Nutzer. Die Kontakte im Mac verwenden vCard 3.0.
Dort schlüsselt sich die Adresse so auf:
ADR;type=WORK;type=pref:;;Straße Hausnummer;Ort;;Plz;
Ich bekomme also [Plz] und [Ort] scheinbar tatsächlich getrennt.

Bei [Straße] und [Hausnummer] sieht das anders aus. Das wird auf dem Mac in ein Feld geschrieben:
ADR;type=pref:;;Straße\nHausnummer;Ort;;Plz;
Spätestens hierfür muss also gesplittet werden, denn im Script verarbeite ich diese Felder einzeln.

Das \n ist aber kein Garant, denn beide Werte stehen zusammengefasst in [Straße]
 
Dann erst Mal eine weitere Frage: Ich nehme an, das ist nur für dich zur persönlichen Nutzung und wir können uns bei der Auswertung auf das Format beschränken, das Du jetzt angegeben hast, nicht wahr? Und die Kontakte im Mac müssen wir nehmen, wie sie sind?
 
OK, dann sehe ich mir das weiter an. Die Hausnummer und die Straße zu splitten dürfte kein Problem sein. Bei der Hausnummer müssen wir wahrscheinlich noch daran denken, dass sie manchmal ein Anhängsel hat wie "59b", was aber auch kein Problem ist. Fällt dir noch mehr ein, was vom Standardformat abweichen könnte?
 
Hmmm, ja, solche Zusätze mit a,b, c sind natürlich dabei.
Straßen bist es mit Bindestrichen, ohne, aus mehreren Wörtern bestehend,
aber mehr fällt mir da auch nicht ein....
 
Ich habe erst los gelegt mit match Regex aber wir brauchen ja nur den String bei dem \n aufzuspalten, dann haben wir schon beides. Sieht dann so aus:
Code:
    <script>
        document.getElementById('inputfile')
            .addEventListener('change', function () {

                let fr = new FileReader();
                fr.onload = function () {
                    text = fr.result;
                    // Text mit dem vCard-Parser auswerten,
                    // dann stehen die Werte im Objekt parsed zur Verfügung:
                    const
                        parsed = vCardParser.parse(fr.result);
                    console.log(parsed);
                    const
                        postBox = parsed[0].address[0].value.postOfficeBox,
                        streetNr = parsed[0].address[0].value.street,
                        city = parsed[0].address[0].value.city,
                        postalCode = parsed[0].address[0].value.postalCode,
                        splitted = streetNr.split('\\n'),
                        street = splitted[0],
                        nr = splitted[1];
                    console.log(postBox, street, nr,);
                    // Beispiel: Angezeigten Namen in Eingabefeld eintragen:
                    document.getElementById('display-name').value = parsed[0].displayName;
                }
                fr.readAsText(this.files[0]);
            });
    </script>
Setzt dann natürlich zwingend voraus, dass das \n Straße und Hausnummer trennt.
 
Dann müssen wir das doch mit Regex machen und die Hausnummer erkennen. Und alles was davor ist, aber ohne \n optional ist die Straße. Kann jetzt einen Moment dauern.
 
Versuche dies:
Code:
    <script>
        document.getElementById('inputfile')
            .addEventListener('change', function () {

                let fr = new FileReader();
                fr.onload = function () {
                    text = fr.result;
                    // Text mit dem vCard-Parser auswerten,
                    // dann stehen die Werte im Objekt parsed zur Verfügung:
                    const
                        parsed = vCardParser.parse(fr.result);
                    console.log(parsed);
                    const
                        postBox = parsed[0].address[0].value.postOfficeBox,
                        streetNr = parsed[0].address[0].value.street,
                        city = parsed[0].address[0].value.city,
                        postalCode = parsed[0].address[0].value.postalCode,
                        regex = /(.+)\\n?(\d+[a-zA-Z]*)/,
                        matches = streetNr.match(regex),
                        street = matches[1],
                        nr = matches[2];
                    console.log(postBox, street, nr,);
                    // Beispiel: Angezeigten Namen in Eingabefeld eintragen:
                    document.getElementById('display-name').value = parsed[0].displayName;
                }
                fr.readAsText(this.files[0]);
            });
    </script>
 

Neue Beiträge

Zurück