Groups | Search | Server Info | Keyboard shortcuts | Login | Register
Groups > de.comp.lang.javascript > #5163
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Newsgroups | de.comp.lang.javascript |
| Subject | Re: Semikolons aus Daten entfernen |
| Date | 2019-09-26 18:00 +0200 |
| Organization | PointedEars Software (PES) |
| Message-ID | <1872806.oMNUckLgyt@PointedEars.de> (permalink) |
| References | <qmi19m$oas$1@news.albasani.net> <qmi834$m79$1@news.albasani.net> |
Wolfgang Wolf wrote:
> Am 26.09.2019 um 11:44 schrieb Wolfgang Wolf:
>> Hallo,
>>
>> habe folgendes Problem: Möchte aus Daten eine csv-Datei erstellen. Das
>> funktioniert bereits. Leider sind in einigen Attributen Semikolons
>> enthalten, die natürlich die Ausgabe verstümmeln. Ich würde gerne vor
>> dem Export alle Semikolons durch ein anderes Zeichen ersetzen.
>
> Ok, habe das jetzt erst mal auf die Schnelle so gelöst:
>
> for (var i = 0; i < data.length; i++) {
Ausser wenn der Wert von “data.length” sich ändern kann, solltest Du den
Wert nur ein einziges Mal abfragen.
for (var i = 0, len = data.length; i < len; i++) {
Rückwärts zu iterieren, wenn es auf die Reihenfolge nicht ankommt, ist in
der Regel effizienter, weil der alte Wert der Iterationsvariablen nicht
gespeichert werden muss:
for (var i = data.length; --i;) {
> for (var prop in data[i]) {
Wenn Du for..in-Schleifen verwendest, dann wird über alle aufzählbaren
Eigenschaften des Objekts und seiner Prototypen iteriert. Das solltest Du
vermeiden, denn Du weisst nie, welche Eigenschaften ein Objekt hat.
Über Array-Objekte wird modern so iteriert:
data.forEach(callback);
Über die nicht-vererbten aufzählbaren Eigenschaften eines Objekts so:
Object.keys(obj).forEach(callback);
> var dProp = data[i][prop];
Da “callback” eine Funktion referenzieren muss, brauchst Du dann auf data[i]
nicht mehr separat zuzugreifen: der Wert wird als erstes Argument der
Funktion übergeben und ist somit über den ersten formalen Parameter
verfügbar.
> if (typeof dProp == "string") {
Korrekt. [Ich habe gerade herausgefunden, dass “dProp instanceof String”
nicht (mehr) funktioniert. “Object(dProp) instanceof String” ginge zwar,
aber was soll das? Jetzt kann man nicht (mehr) mit Polymorphie von String
ableiten :-( Ist ähnlich idiotisch wie dass “this” bei Arrow Functions
nicht mehr gesetzt werden kann, so dass der Code unten mit *nur* Arrow
Functions _nicht_ funktioniert.]
Beachte, dass Duck Typing zwar hier auch möglich ist, aber unerwünschte
Ergebnisse haben kann, weil alle nativen Objekte die toString-Methode von
Object.prototype erben.
> data[i][prop] = dProp.replace(/;/g,",");
Sobald Du auf ein Objekt mehrfach zugreifst (hier: das von data[i]
referenzierte Objekt) lohnt es sich die Referenz in einer Variable zu
speichern und dann auf diese Variable zuzugreifen.
> }
> }
> }
Zusammenfassend:
data.forEach(element => {
Object.keys(element).forEach(function (key) {
let value = this[key];
if (typeof value === 'string')
{
this[key] = value.replace(/;/g, ',');
}
}, element);
});
Ein Einzeiler kann es also nicht werden, ausser Du magst Spaghetticode oder
verwendest eine Library.
Ob Du dabei ES 6-Syntax verwendest, ist natürlich Dir überlassen. Mit
Präprozessoren wie Babel.js gibt es aber – ausser der Build-Prozess soll
nicht geändert werden – keinen guten Grund mehr, sie nicht zu verwenden.
Bedenke ausserdem, dass es einen guten Grund gibt, weshalb dort Semikolons
und *nicht* Kommas stehen: In
"Draht;sw;0,5mm²;40°C...150°C"
sind die Daten eindeutig. Bei
"Draht,sw,0,5mm²,40°C...150°C"
(das Ergebnis Deiner Ersetzung) ist das nicht mehr der Fall (ist das Komma
dort ein Feldtrenner oder ist es ein Dezimalkomma?). Widrigenfalls müsstest
Du also zum Beispiel auch das Zahlenformat konvertieren, *bevor* Du den
Feldtrenner konvertierst – sonst geht Information verloren.
> Bessere Lösungen sind natürlich willkommen.
[x] done
--
PointedEars
FAQ: <http://PointedEars.de/faq> | <http://PointedEars.de/es-matrix>
<https://github.com/PointedEars> | <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.
Back to de.comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar
Semikolons aus Daten entfernen Wolfgang Wolf <w.wolf@dommel.de> - 2019-09-26 11:44 +0200
Re: Semikolons aus Daten entfernen Wolfgang Wolf <w.wolf@dommel.de> - 2019-09-26 13:40 +0200
Re: Semikolons aus Daten entfernen Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2019-09-26 18:00 +0200
Re: Semikolons aus Daten entfernen Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2019-09-26 18:09 +0200
Re: Semikolons aus Daten entfernen Wolfgang Wolf <w.wolf@dommel.de> - 2019-09-28 10:22 +0200
Re: Semikolons aus Daten entfernen Stefan Mayer <meniskus@gmx.net> - 2019-09-28 14:25 +0200
Re: Semikolons aus Daten entfernen Wolfgang Wolf <w.wolf@dommel.de> - 2019-10-07 15:59 +0200
Re: Semikolons aus Daten entfernen Stefan Mayer <meniskus@gmx.net> - 2019-10-08 00:42 +0200
Re: Semikolons aus Daten entfernen Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2019-09-28 17:41 +0200
Re: Semikolons aus Daten entfernen Wolfgang Wolf <w.wolf@dommel.de> - 2019-10-07 16:06 +0200
Re: Semikolons aus Daten entfernen Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2019-10-10 01:26 +0200
Re: Semikolons aus Daten entfernen Wolfgang Wolf <w.wolf@dommel.de> - 2019-11-12 16:58 +0100
Re: Semikolons aus Daten entfernen Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2019-11-13 01:04 +0100
Re: Semikolons aus Daten entfernen Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2019-11-14 19:27 +0100
Re: Semikolons aus Daten entfernen Wolfgang Wolf <w.wolf@dommel.de> - 2019-11-15 12:51 +0100
Re: Semikolons aus Daten entfernen Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2019-11-16 04:22 +0100
Re: Semikolons aus Daten entfernen Stefan Mayer <meniskus@gmx.net> - 2019-11-16 13:42 +0100
Re: Semikolons aus Daten entfernen Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2019-11-16 14:51 +0100
Re: Semikolons aus Daten entfernen Stefan Mayer <meniskus@gmx.net> - 2019-11-18 11:56 +0100
Re: Semikolons aus Daten entfernen Wolfgang Wolf <w.wolf@dommel.de> - 2019-11-18 13:50 +0100
Re: Semikolons aus Daten entfernen Stefan Mayer <meniskus@gmx.net> - 2019-11-18 15:43 +0100
Re: Semikolons aus Daten entfernen Wolfgang Wolf <w.wolf@dommel.de> - 2019-11-18 16:40 +0100
Re: Semikolons aus Daten entfernen Stefan Mayer <meniskus@gmx.net> - 2019-11-18 21:32 +0100
Re: Semikolons aus Daten entfernen Wolfgang Wolf <w.wolf@dommel.de> - 2019-11-19 07:49 +0100
Re: Semikolons aus Daten entfernen Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2019-11-19 00:03 +0100
Re: Semikolons aus Daten entfernen Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2019-11-19 18:48 +0100
Re: Semikolons aus Daten entfernen Stefan Mayer <meniskus@gmx.net> - 2019-11-19 19:42 +0100
Re: Semikolons aus Daten entfernen Stefan Mayer <meniskus@gmx.net> - 2019-11-20 20:31 +0100
Re: Semikolons aus Daten entfernen Wolfgang Wolf <w.wolf@dommel.de> - 2019-11-16 13:45 +0100
Re: Semikolons aus Daten entfernen Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2019-11-16 14:57 +0100
Re: Semikolons aus Daten entfernen Wolfgang Wolf <w.wolf@dommel.de> - 2019-11-18 10:08 +0100
Re: Semikolons aus Daten entfernen Wolfgang Wolf <w.wolf@dommel.de> - 2019-11-14 11:48 +0100
Re: Semikolons aus Daten entfernen Claus Reibenstein <4spamersonly@kabelmail.de> - 2019-09-26 14:44 +0200
Re: Semikolons aus Daten entfernen Wolfgang Wolf <w.wolf@dommel.de> - 2019-09-26 15:57 +0200
csiph-web