numerischer string auf nichtnumerische Zeichen prüfen
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.
-
-
Am einfachsten wird das wohl über RegEx gehen.
Datum als String speichern (ich gehe mal vom Formathhmmssttmmjjjj
, also meinetwegen 15000021082017, aus)
Und dann über RegEx.Match jedes Zeichen auf einen "Match" testen und ein entsprechendes Flag setzen und falls du ein nicht numerisches Zeichen findest, die Schleife abbrechen
Oder das Ganze zu Fuß machen, indem du das "Datum" in einer Schleife durchläufst (wie oben) und selber jeweils das aktuelle Zeichen von Char auf Integer castest und anschlißend prüfst, ob 0, 1, 2, 3, 4..., 9 ist.
Lg RadinatorIn general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell -
ribart schrieb:
ob nicht numerische Zeichen in diesem String vorhanden sind.
Int32.Tryparse
oder Char für Char die Zeichenfolge prüfen. -
-
ribart schrieb:
Datum, das als numerischer String vorliegt
Wie sieht der Datumsstring aus?
Wie ist dieser Integer definiert?
Ist es nicht sinnvoller, aus dem Datum-String ein Datum zu machen und danach das Datum in einen String zu konvertieren?Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
hallo rodfromgermany, mit Datum ist die Einzahl von Daten gemeint. Ich lese aus einer Datei einen Satz, der Zahlen als String enthält, darunter auch diese Integer Zahl, die aber leider manchmal mit Buchstaben "verseucht" ist. Mit Buchstaben versehen ist sie nicht konvertierbar. Deshalb meine Frage.
Richard -
ribart schrieb:
ich versuchs mal mit den reg.Expressions, da kann man gleich den nichtnumerischen Teil entfernen.
Ja, wäre nur toll gewesen, wenn die Information (das Du den nicht-numerischen Teil entfernen willst) gleich mitgeliefert hättest. Das ist etwas ganz anderes (IMO) also nur zu prüfen. Also warum nicht gleich die richtige Aufgabenstellung posten? -
-
ribart schrieb:
mit Datum ist die Einzahl von Daten gemeint.
RodFromGermany schrieb:
Wie sieht der Datumsstring aus?Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
Edit: kleine Optimierung
Oder auch:
Wie immer nur so oder so ähnlich^^
Ich wollte auch mal ne total überflüssige Signatur:
---Leer---Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „jvbsl“ ()
-
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
Da das Interesse an den Daten besteht hier eine Auswahl von zwei Datensätze:
ArII $ 302.8721 $ 302.872055 $ 3bl $ 172213.8798 $ 205221.512 $ 3s23p4(1D)4p $ 2P° $ 3/2 $ 3s23p4(3P)5d $ 2P $ 3/2 $ L14821
ArII $ 302.89140 $ 302.891004 $ 47 $ 163299.5616 $ 196305.1289 $ 3s23p4(1D)3d $ 2F $ 5/2 $ 3s23p4(3P1)4f $ 2[3]° $ 7/2 $ L11520
Interessant ist für mich nur die erste, zweite und vierte Spalte, in der 4. Spalte sind manchmal neben der Zahl noch andere beliebige Zeichen vorhanden.
Richard -
-
-
@RodFromGermany: das zweite ist nen Einzeiler außerdem geht es nicht immer um die kürze des Codes, denn was auch immer du für nen Einzeiler hast ich denke fast, der ist unperformanter :P(wobei man den Code oben noch weiter optimieren kann, ich editier grad mal eine kleine Optimierung rein - und mit unsafe würde noch mehr gehen :D)Ich wollte auch mal ne total überflüssige Signatur:
---Leer--- -
ribart schrieb:
das $-Zeichen ist der Spaltentrenner, ich dachte das erkennt man sofort.
Egal - nun weiss ich: Du willst"3bl"
und"47"
nach Integer konvertieren. Letzteres ist einfach - geht mitInteger.Parse()
. Bei ersterem müsste man zuvor alle Zifferzeichen "herauspicken" - käme dann zB so raus:
ach - das ist ja fast dasselbe wie jvbsl's 2. Vorschlag, nur in vb
-
ribart schrieb:
ich dachte das erkennt man sofort.
Jede Information ist wichtig, jede Nicht-Information führt zu Spekulatius und weg vom Ziel.
ribart schrieb:
in der 4. Spalte sind manchmal neben der Zahl noch andere beliebige Zeichen vorhanden.
Haste dafür auch noch ein Beispiel?
@jvbsl Ich bin da auch eher ein ausführlich-Schreiber, da ist mir das Verständnis nach einem halben Jahr wichtiger. Das wird bei @ribart mit Deinem und des @ErfinderDesRades Einzeiler wohl nicht so sein.Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
RodFromGermany schrieb:
da ist mir das Verständnis nach einem halben Jahr wichtiger. Das wird bei @ribart mit Deinem und des @ErfinderDesRades Einzeiler wohl nicht so sein.
Verständlicher kann man nicht formulieren, dass nur die Digits gemeint sind!
Allenfalls @ribart (noch) unvollständige Sprachkenntnisse können ihm ein Problem machen, aber das wird sich in 1/2 Jahr ja verbessern.
Integer.Parse
,.Where
,AddressOf
,.ToArray
- das ist alles Must-Know-no-excuses, wenn man .Net programmiert.
Weil klar: Für einen der nicht die Grundlagen der Sprache kann, ist wohl jeder gute Code unverständlich.
Aber kann er sie, versteht er das auch in 10 Jahren, und besser als so einen listigen, selbstgebastelten Parse-Algo (post#10, snippet#1)
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()
-
Deshalb kommt der in ne methode ParseIgnoreNonNumerics.
Außerdem lässt char.IsDigit alles zu was char.IsNumeric zulässt+Dezimaltrennzeichen. Wollen wir bei int denk ich nicht. Und selbst IsNumeric könnte ein Problem sein, da es anscheinend auch Zahlendarstellungen aus anderen Sprachen/Zeichensätzen zu lässt, was das genau bedeutet - keine Ahnung. Ob es überhaupt stimmt - keine ahnung. Ob int.Parse damit klar kommt - keine Ahnung^^Ich wollte auch mal ne total überflüssige Signatur:
---Leer--- -
ErfinderDesRades schrieb:
Wat?112233
raus, und ich denke nicht, dass @ribart das gemeint hat.
Bei dem langen String in seinem Beispiel gibt es eineOverflowException
, weil einfach zu viele Ziffern aufgesammelt werden, die nix miteinander zu tun haben.
Mit nem zweifachen Split sieht man besser, was da passiert.Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert!
-
Ähnliche Themen
-
6 Benutzer haben hier geschrieben
- ribart (9)
- jvbsl (6)
- RodFromGermany (5)
- ErfinderDesRades (3)
- Dksksm (2)
- Radinator (1)