Stringlänge

  • Ich bin auf der Suche nach einer Möglichkeit einen String auf eine Länge von zb. 7-27 Zeichen festzulegen, danach folgt ein zweiter String mit zb. mit 10-19 Zeichen und diesen per Filewriteline wegzuschreiben. Die Strings kommen aus einer Datenbank und ist mal länger und mal kürzer als die Vorgabe. Die Trennung der Textfelder muss aber im gleichlang sein. Die Textdatei muss von dritten eingelsen werden, dh auch die feste Länge der Felder.

    Hat irgendwer eine schöne Idee?

    Einmal editiert, zuletzt von kunstlust (9. August 2011 um 21:29)

  • Das mit der StringLen - Schleife ist wohl die einzige Möglichkeit, oder? Ich habs mir fast gedacht... da bauche ich wohl sehr viele Schleifen,...
    Danke Marthog

  • wieso?
    mach einfach eine Funktion und übergebe jeweils den String
    und die notwendige Anzahl Zeichen und lass das dann durch die Schleife laufen.

    So brauchst Du nur eine Schleife ;)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Die Funktion also ungefair so:

    [autoit]


    $text = "AutoIT.de"
    $anzahl = 15
    MsgBox(0, "test", laenge())
    Func laenge()
    For $i = StringLen($text) To $anzahl
    $text &= ":-) "
    Next
    Return $text
    EndFunc ;==>laenge

    [/autoit]

    Wie müsse die Ausgabe bei Stringformat aussehen, ich verstehe das noch nicht so recht....

  • ich würde es so machen...

    [autoit]

    $text = "AutoIT.de"
    $anzahl = 15

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

    MsgBox(0, "test", laenge($text,$anzahl))
    MsgBox(0, "test", StringLen(laenge($text,$anzahl)))

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

    Func laenge($sString, $nCount)
    Local $sStringNew
    For $i = StringLen($sString) To $nCount-1
    $sStringNew &= " "
    Next
    Return $sString&$sStringNew
    EndFunc ;==>laenge

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • StringFormat ist kompliziert, aber nützlich. Gibt es in fast jeder Sprache.

    [autoit]


    StringFormat("%-27.*s", $var)

    [/autoit]

    Erklärung:
    % bedeutet: Hier wird was eingefügt
    - heißt, der Text steht am Anfang und die Leerzeichen werden angehängt.
    27 heißt, dass es 27 Zeichen lang wird
    . trennt einfach nur die 27 vom nächsten Teil
    * steht für Nachkommastellen. Beim String sollte * stehen.
    s steht für String

  • also mit StringFormat werden so Leerzeichen angehängt:

    [autoit]

    MsgBox(0, '', StringFormat("%-"&$anzahl&"s", $text))

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Die Lösung könnte also so ausehen


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

    ConsoleWrite(StringMid(StringFormat("%-20.*s", "AutoIT.de"),1,20))

    [/autoit]
  • Warum hat die die Line "#AutoIt3Wrapper_UseX64=n" bzw "#AutoIt3Wrapper_UseX64=y" einfluss auf die Ausgabe?

    [autoit]


    MsgBox(0,"",StringMid(StringFormat("%-20.*s", "AutoIT.de"),1,20))

    [/autoit]
  • Schaue dir mal _StringRepeat() an.

    Beispiel:

    [autoit]


    #include <String.au3>
    ConsoleWrite(MinLen("Autoit.de") & @CRLF)

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

    Func MinLen($string, $min = 15, $char = "*", $pre = True)
    Local $len = StringLen($string)
    If $len >= $min Then Return
    If $pre Then Return _StringRepeat($char, $min - $len) & $string
    Return $string & _StringRepeat($char, $min - $len)
    EndFunc

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    2 Mal editiert, zuletzt von UEZ (9. August 2011 um 13:53)

  • Hallo UEZ,

    ich habe das noch angepasst, damit ich die Anzahl und die Variable übergeben kann:

    [autoit]


    #include <String.au3>

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

    $string = "1-Autoit.de"
    $min = 15
    ConsoleWrite(MinLen($string,$min) & @CRLF)

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

    $string = "2-Autoit.de"
    $min = 20

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

    ConsoleWrite(MinLen($string,$min) & @CRLF)

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

    Func MinLen(ByRef $string, ByRef $min)
    dim $char = "*", $pre = True
    Local $len = StringLen($string)
    If $len >= $min Then Return
    If $pre Then Return _StringRepeat($char, $min - $len) & $string
    Return $string & _StringRepeat($char, $min - $len)
    EndFunc

    [/autoit]

    Danke

  • Das kannst du doch!

    [autoit]


    #include <String.au3>
    ConsoleWrite(MinLen("1-Autoit.de") & @CRLF)
    ConsoleWrite(MinLen("2-Autoit.de", 20) & @CRLF)
    ConsoleWrite(MinLen("1-Autoit.de", 30, "#", False) & @CRLF)

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

    Func MinLen($string, $min = 15, $char = "*", $pre = True)
    Local $len = StringLen($string)
    If $len >= $min Then Return
    If $pre Then Return _StringRepeat($char, $min - $len) & $string
    Return $string & _StringRepeat($char, $min - $len)
    EndFunc

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Super so geht es noch besser,als im meinem geänderten Beispiel.

    Danke UEZ, mit Funktion bin ich noch nicht so vertraut. :S

    Kannst du mir auch erklären warum die Wahl der AutoIt3Wrapper_UseX64=y eine ander Textdarstellung, als =n bring?

  • so,
    finale Version auf das minimum gekürzt und ohne Einschränkung nutzbar auch mit "x64".

    [autoit]

    MsgBox(0,"",StringFixLength("AutoIT.de",20)); $var1 = variable Stringlänge, $var2 = Anzahl Zeichen, die zurückgegeben werden sollen

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

    Func StringFixLength($sString, $nCount)
    Return StringMid(StringFormat("%-"&$nCount&"s", $sString),1,$nCount)
    EndFunc

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)