| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| AS Programmer Registriert seit: Dec 2009
Beiträge: 36
| Regulärer Ausdruck: Zahl nach einem Komma ignorieren
Schönen Guten Abend! Ich beschäftige mich gerade mit Regulären Ausdrücken und komme an einer Stelle nicht weiter. Ich habe einen String, den ich bei jedem Kommatar unterteilen möchte. Hier ein Beispiel: Code: var a:String = "Hallo, Hello, Bonjour, ciao Code: var regKomma:RegExp = /,[^,]*/g; Code: , Hello , Bonjour , ciao Code: var a:String = "Hallo, 3, 4,5, 5 Code: , 3 , 4,5 , 5 Ich habe es so probiert: Code: var regKomma:RegExp = /,\D[^(,\D)]*/g; Könnt ihr mir evtl. weiterhelfen? Vielen Danke schonmal im vorraus! Gruß Matti |
| | |
| | #2 (permalink) |
| Keine Panik Registriert seit: Apr 2010 Ort: Düsseldorf (im ernst)
Beiträge: 1.868
|
das ist aus mehreren Gründen doof: - trennzeichen sollten im Content nicht verwendet werden, das führt wie du siehst zu Problemen. - "4,5" sollte direkt 4.5 lauten; in allen (mir bekannten) Programmiersprachen wird der Punkt als Dezimaltrennzeichen verwendet - wenn du dich mit regulären Ausdrücken beschäftigen willst: gut, aber für diesen konkreten Fall wäre ein split(", ") simpler und performanter oder auch split(/,\s+/g) Code: /(?<=,\s|^)\s*(.+?)\s*(?=,\s|$)/g /(?<=,|^)\s*(.+?)\s*(?=,\s+|$)/g /\s*(.+?)\s*(?:,\s|$)/g In allen drei Fällen ist die 1. Gruppe, die interessante. |
| | |
| | #3 (permalink) |
| AS Programmer Registriert seit: Dec 2009
Beiträge: 36
|
Es ist auch sehr unüblich die Dezimalzahlen mit einem Komma zu trennen. Das Problem das ich habe ist, dass ich den String nicht selbst vorgebe, sondern der String kommt von einem DME (Digitalen Melde Empfänger), der für Feuerwehren und das Technische Hilfswerk bzw. DLRG eingesetzt wird. Dabei wird die Einsatzmeldung in verschiedene Teile aufgeteilt. Das heißt der Einsatzort und der Einsatzvorfall den die Leitstelle durchgibt, sind über ein Komma getrennt. Wenn jetzt aber die Leitstelle eine Wegbeschreibung über eine Kilometerangabe an einer Autobahn oder Bundestraße tätigt, soll das nicht automatisch eine einteilung sein, sondern soll zu dem Einsatzort gehören. Ich meine nur damit, dass ich keinen Einfluss auf den Text habe, sondern das was die Leitstelle eintippt in dem String landet und leider trennen nicht alle Disponenten eine Dezimalzahl mit einem Punkt. Vielen Dank schonmal für die Bemühung, ich werde die einzelnen Ausdrücke morgen probieren und sagen ob es funktioniert hat. Gruß Matti |
| | |
| | #4 (permalink) |
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.162
|
Wenn die Eingaben so unsicher sind, würde ich ein anderes Trennzeichen verwenden als ein simples Komma! Kommas kommen so oft vor, dass das Fehlerrisiko IMHO viel zu hoch ist. Wer oder was kodiert denn die Zeilen und setzt die Trennzeichen?
__________________ Viele Grüße // Martin Martin Kraft // Interaktionsdesign Hilfreiche Websites: // Hilfe zur Adobe Flash Plattform // ActionScript 2 Referenz // ActionScript 3 Referenz // ActionScript 3 Arbeitshandbuch // weitere Flash Ressourcen Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da! |
| | |
| | #5 (permalink) |
| AS Programmer Registriert seit: Dec 2009
Beiträge: 36
|
Leider habe ich darauf keinen Einfluss. Der DME kodiert das Signal, welches von der Leitstelle gesendet wird. Über einen Socket empfange ich diesen String und die einzelnen Kategorien sind leider über Kommas getrennt. Ich hätte die Trennung auf keinen Fall mit Kommas gemacht. Aber wie gesagt, das kann ich leider nicht ändern, deswegen muss ich damit leider leben und das beste draus machen. |
| | |
| | #6 (permalink) |
| Keine Panik Registriert seit: Apr 2010 Ort: Düsseldorf (im ernst)
Beiträge: 1.868
|
dann würde ich versuchen mehr auf die Struktur des gesamten Datensatzes einzugehen (wenn es eine gibt ), und so quasi "Textblöcke" zu erkennen.bspw: "1234, name, text mit komma, Punkt, und weiss was sonst noch, datum" da kannst du den Text in der Mitte anhand der Blöcke davor und dahinter identifizieren, und kannst so die Kommas darin ignorieren/einbeziehen. dadurch wird der reguläre Ausdruck zwar "endlos" lang, aber auch zuverlässiger. dafür müsstest du/ich mehr Infos über den Aufbau dieses Datensatzes haben, und wie die einzelnen Felder aufgebaut sind/welche Zeichen darin vorkommen können. wichtig sind dabei so Dinge wie rein numerische Felder, rein alphanumerische, felder mit konstanter länge, oder welche die du irgendwie so genau wie möglich beschreiben kannst: bspw eine Adresse (einfach) /\s*([a-z-_.\s]+?[0-9]+\s*[a-z]?)\s*/gi Eine Buchstabenfolge incl Bindestrich, unterstrich, Punkt und Leerzeichen, gefolgt von der Hausnummer, evtl kein, ein oder mehrere Leerzeichen (bspw zum Strukturieren) und evtl noch ein Buchstabe (wie in Hausnummer 15A) wenn du dieses Feld erkennen kannst, weisst du was in dem Feld davor und dahinter steht! |
| | |
| | #7 (permalink) |
| AS Programmer Registriert seit: Dec 2009
Beiträge: 36
|
Ein Beispiel einer Einsatzmeldung so wie sie in Actionscript ankommt wäre diese: Code: 20:56 28.12.11 02B H2Y, , Grundschule ,Schulstraße,-,Neustadt, , , WOHNUNGSBRAND Aufgebaut ist es immer gleich. Vor dem ersten Komma da Alarmierungsstichwort. Nach dem ersten Komma weiß ich leider nicht (bis jetzt immer leer), danach der Text ist das Einsatzobjekt. Hier ist es nicht möglich, dass sich dort ein Komma befindet, dann die Ortsangabe (eig. nur Straßennamen), dann der Ortsteil (war noch nie ein Komma drin), dann kommt der Ort (auch ohne Komma), dann ein Feld was auch noch nie benutzt wurde, dann der Ortszusatz (hier sind Komma möglich wie z.B. Kilometerangaben, die sich auf die Ortsangabe beziehen) und als letzes Feld die Einsatzart (hier sind auch Kommatar möglich wie z.B. "ZIMMERBRAND, PERSON IM BEBÄUDE") D.h. nur in den letzten Beiden Felden können sich Kommas befinden. Hier zwei Beispiele mit mehr als den 8-Standart Kommas: Code: 20:56 28.12.11 03B B1, , ,B34 Neustadt -> Altstadt,-,Neustadt, , KM 23,9, BRENNT PKW 20:56 28.12.11 03B UEB, , ,Hauptstraße 72,-,Münchenhagen, , , ZIMMERBRAND, PERSON IM BEBÄUDE |
| | |
| | #8 (permalink) |
| Keine Panik Registriert seit: Apr 2010 Ort: Düsseldorf (im ernst)
Beiträge: 1.868
|
also zwei freitext Felder hintereinander. Das ist ein Problem. ich hatte gehofft, dass die irgendwie einzeln vorkommen, und man so Anfang und Ende bestimmen kann, weil im schlimmsten Fall: Code: KM 27,3, hinter der Mühle, Massenkarambolage, mehrere Personen schwer verletzt, Explositionsgefahr die ersten 6 Felder scheinen ja gut zu erkennen zu sein, nur die letzten beiden stellen ein Problem dar. Im Moment hab ich da keine Idee zu. |
| | |
| | #9 (permalink) |
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.162
|
Genau das war genau der Grund für meine Frage. Wenn solche Probleme nicht bereits bei der Eingabe abgefangen bzw. kodiert werden, ist man beim Verarbeiten mit Flash chancenlos! Deshalb mochmal: Liegen die Daten an der Quelle tatsächlich nur als ein durchgängiger String vor? D.h. gibt der Nutzer selbst die Trennkommas ein, so dass tatsächlich nur ein Feld in der Datenbank steht?
__________________ Viele Grüße // Martin Martin Kraft // Interaktionsdesign Hilfreiche Websites: // Hilfe zur Adobe Flash Plattform // ActionScript 2 Referenz // ActionScript 3 Referenz // ActionScript 3 Arbeitshandbuch // weitere Flash Ressourcen Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da! Geändert von Martin Kraft (23-01-2012 um 16:44 Uhr) |
| | |
| | #10 (permalink) | ||
| Keine Panik Registriert seit: Apr 2010 Ort: Düsseldorf (im ernst)
Beiträge: 1.868
| Zitat:
Zitat:
![]() da werd ich aber auch neugierig, wofür das ganze dann sein soll. Mattcheck@ PHP-Code: Damit hättest du ein Problem weniger. Gibt es eigentlich eine Definition zu dem Feld "Ortszusatz", also was da logisch drinstehen soll(te). ich mein nicht den Zeichensatz. kommen da nur solche Kilometerangaben drin vor, oder evtl noch andere Angaben mit Kommas drin? | ||
| | |
| | #11 (permalink) |
| AS Programmer Registriert seit: Dec 2009
Beiträge: 36
|
@Martin Kraft In der Leistelle werden die einzelnen Felder über eine Maske eingeben. Gespeichert werden die dort denke ich auch in einer Datenbank. Wenn jetzt der Einsatz allerdings abgeschickt wird, landen die ganzen Felder auf dem Pieper als ein zusammenhängender Text der nur durch die Kommas getrennt wird. Wir wollen lediglich eine Air-Applikation laufen lassen, die über einen Socket auf den Pieper zugreift und die Meldungen empfängt. Dies ist der Sting von dem ich gesprochen habe. Dann soll die Meldung geordnet auf einem Bildschirm angezeigt werden, daher auch die Teilung des Textes. @thomas_E Die Trennung von Dezimalzahlen ist dann also kein Problem mehr. Das ist super! Und zum Orstszusatz kann ich nur sagen, dass bis jetzt nur Kilometerangaben dort drin sind. Dann könnte man das ja so machen, dass man den ganzen Text nach dem siebten Komma nimmt und den als Einsatzvorfall speichert. |
| | |
| | #12 (permalink) | |||
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.162
| Zitat:
Zitat:
Zitat:
interessantes Setup
__________________ Viele Grüße // Martin Martin Kraft // Interaktionsdesign Hilfreiche Websites: // Hilfe zur Adobe Flash Plattform // ActionScript 2 Referenz // ActionScript 3 Referenz // ActionScript 3 Arbeitshandbuch // weitere Flash Ressourcen Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da! Geändert von Martin Kraft (25-01-2012 um 12:07 Uhr) | |||
| | |
| | #13 (permalink) |
| AS Programmer Registriert seit: Dec 2009
Beiträge: 36
|
Die Leistelle, die die Daten eintippt sitzt 17 Kilometer entfernt, d.h. sie schickt den Text ab und er kommt auf einem DME an (Datei:Swissphone DE900-03.jpg) -> genau diesen meine ich. An der Unterseite gibt es einen RX, TX und GND Pin über den wir per serieller Schnittstelle an unseren PC im Gerätehaus gehen. Der Socket der Air Datei liest den PORT aus und wenn etwas an kommt soll er den Text "entschlüsseln" Also ja wir benutzen einen Laptop, der per USB Kabel mit dem DME (Digitaler Melde Empfänger) verbunden ist. Und leider gibt der Melder genau die Nachricht aus die ihm per Funk zugesandt wurde. Das heißt, die Trennung mit den Kommas übernimm tnicht der DME sondern die Leistelle. Zusammenfassend: Die einzige Möglichkeit, die wir haben ist mittels Einsatzmeldung an die Daten zu gelangen. Und das ist der Text, den der Pieper ausgibt. Wie der Text aussieht und wie er kodiert, getrennt wird entscheidet die Leitstelle auf die wir leider keinen Einfluss haben. |
| | |
![]() |
| Lesezeichen |
| Stichworte |
| ausdrücke, komma, regexp, reguläre, reguläre ausdrücke |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| regulärer ausdruck. | boreker | PHP und MySQL | 3 | 27-08-2007 19:01 |
| regulärer ausdruck | lixx | PHP und MySQL | 1 | 21-06-2006 11:59 |
| Zahl auf 2 Dezimalstellen nach Komma ausgeben | groovesurfer | Flash 4 und Flash 5 | 3 | 13-12-2003 21:19 |
| ZAHL RUNDEN auf 2 stellen nach komma? | kendal | Flash MX | 2 | 14-03-2003 20:09 |
| 3. Zahl nach dem Komma.. aufrunden | Julian Graw | ActionScript 1 | 2 | 19-12-2001 21:46 |