Zahlenvergleich

  • Hallo,

    ich wollte fragen ob jemand eine Idee hat wie ich in einer Datei in der Viele Zahlen untereinander stehen, die Suchen kann die der gesuchten am nähsten ist (negative und positive Zahlen).
    Also z.B. Ich suche die Zahl 2333
    Die Datei sieht z.B. so aus

    2100
    2234
    2310
    2500
    2700
    ...

    Wie bekomme ich es hin das er mit da jetzt die 2310 raussucht als am nächsten liegende Zahl? Ich komm einfach nicht drauf wie man das hinbekommt. Also einfach die gleiche Zahl zu suchen ist ja simpel aber ein ähnliche? o_O

    MfG

    akira2012

    ***---____---Wer RechtSCHRAIBfehler findet der darf Sie behalLTEN!---___---***

  • Du setzt ein Vergleichswert:
    $Klein = 0
    dann werden die Zahl mit der gesuchten verglichen
    Ist die Bedingung erfüllt wird geprüft ob die gefundene großer als der Vergleichswert ist.
    Wenn ja haste einen neuen Vergleichswert ……

    Das ganze auch für die großen Zahlen

    Gruss Hans-Jürgen ^^

  • Du setzt ein Vergleichswert:
    $Klein = 0
    dann werden die Zahl mit der gesuchten verglichen
    Ist die Bedingung erfüllt wird geprüft ob die gefundene großer als der Vergleichswert ist.
    Wenn ja haste einen neuen Vergleichswert ……

    Das ganze auch für die großen Zahlen

    Du setzt ein Vergleichswert:
    $Klein = 0
    dann werden die Zahl mit der gesuchten verglichen
    Ist die Bedingung erfüllt wird geprüft ob die gefundene großer als der Vergleichswert ist.
    Wenn ja haste einen neuen Vergleichswert ……

    Das ganze auch für die großen Zahlen

    Ich glaub ich kann dir nicht ganz folgen... Wenn ich nach einem Wert suche der NUR ÄHNLICH ist dann kann ich doch nicht einfach sagen such nach irgendeiner Zahl. Kannst du das bitte was näher erläutern. Danke schonmal für die schnelle Antwort ^^

    MfG

    akira2012

    ***---____---Wer RechtSCHRAIBfehler findet der darf Sie behalLTEN!---___---***

  • Irgendwie so :)

    Spoiler anzeigen
    [autoit]

    Global $Array[6] = [2100, 2234, 2310, 2998, 3001, 527]
    $Number = _GetNearestNumber($Array, 3000)
    MsgBox(0, "", $Number)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _GetNearestNumber($sNumbersArray, $sNumber)
    Local $sArrayMinDiff = '', $sArrayCorrect
    For $i = 0 To UBound($sNumbersArray) - 1
    $sNumberDiff = StringReplace(Number($sNumbersArray[$i]) - Number($sNumber), "-", "")
    If (Number($sNumberDiff) < Number($sArrayMinDiff)) Or $sArrayMinDiff = '' Then
    $sArrayMinDiff = $sNumberDiff
    $sArrayCorrect = $i
    EndIf
    Next
    Return $sNumbersArray[$sArrayCorrect]
    EndFunc ;==>_GetNearestNumber

    [/autoit]
  • Ja so funktioniert das AAABER ich habe eine kleine Wichtigkeit vergessen zu erzählen. Der Array enthält nicht nur Zahlen sondern diese sind von Text umgeben -.-

    Also

    blablablablabla xyz 2000 blablablablabla xyz
    blablablablabla xyz 2311 blablablablabla xyz usw...

    MfG

    akira2012

    ***---____---Wer RechtSCHRAIBfehler findet der darf Sie behalLTEN!---___---***

  • Kein Ding :)

    Spoiler anzeigen
    [autoit]


    Global $Array[3] = ["a763bb", "f w1001 abcdf r!=", "522ewte"]
    $Number = _GetNearestNumber($Array, 1000)
    MsgBox(0, "", $Number)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _GetNearestNumber($sNumbersArray, $sNumber)
    Local $sArrayMinDiff = '', $sArrayCorrect
    For $i = 0 To UBound($sNumbersArray) - 1
    $sNumberDiff = StringReplace(Number(StringRegExpReplace($sNumbersArray[$i], "[^\d+]", '$1')) - Number($sNumber), "-", "")
    If (Number($sNumberDiff) < Number($sArrayMinDiff)) Or $sArrayMinDiff = '' Then
    $sArrayMinDiff = $sNumberDiff
    $sArrayCorrect = $i
    EndIf
    Next
    Return StringRegExpReplace($sNumbersArray[$sArrayCorrect], "[^\d+]", '$1')
    EndFunc ;==>_GetNearestNumber

    [/autoit]
  • WOW. Nice. Noch eine Sache dann bin ich endlich wunschlos glücklich.
    Kann man das auch so einstellen das nur 3 und 4 stellige Zahlen berücksichtigt werden? Es sind nämlich teilweise 2 zahlen mit in dem String die nicht berücksichtig werden sollen. (Und werden bei dieser Variante auch negative Werte berücksichtigt? Ich blick da nämlich nicht ganz durch -.-)

    MfG

    akira2012

    ***---____---Wer RechtSCHRAIBfehler findet der darf Sie behalLTEN!---___---***

  • Ja auch negative werden berücksichtig.

    Edit: Das hatte nen Fehler, jetzt stimmts.

    Spoiler anzeigen
    [autoit]

    Global $Array[4] = ["f 1222", "f 4566", "cd -522", "ab 10001"]
    $Number = _GetNearestNumber($Array, 10000)
    MsgBox(0, "", $Number)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _GetNearestNumber($sNumbersArray, $sNumber)
    Local $sArrayMinDiff = '', $sArrayCorrect
    For $i = 0 To UBound($sNumbersArray) - 1
    $sFormatedNumber = Number(StringRegExpReplace($sNumbersArray[$i], "[^-\d+]", '$1'))
    MsgBox(0, "", $sFormatedNumber)
    If StringLen($sFormatedNumber) < 3 Or StringLen($sFormatedNumber) > 4 Then ContinueLoop
    $sNumberDiff = StringReplace($sFormatedNumber - Number($sNumber), "-", "")
    If (Number($sNumberDiff) < Number($sArrayMinDiff)) Or $sArrayMinDiff = '' Then
    $sArrayMinDiff = $sNumberDiff
    $sArrayCorrect = $i
    EndIf
    Next
    Return StringRegExpReplace($sNumbersArray[$sArrayCorrect], "[^-\d+]", '$1')
    EndFunc ;==>_GetNearestNumber

    [/autoit]
  • Hallo - ich nochmal.

    funktioniert leider doch nicht... irgendwie bekomm ich immer was falsches raus X(

    MfG

    akira2012

    ***---____---Wer RechtSCHRAIBfehler findet der darf Sie behalLTEN!---___---***