2017-03-23 4 views
0
def get_avail_mb(): int 

    f: FILE = FILE.open("/proc/meminfo","r") 
    s: string = "" 
    while s.length < 200 do s += " " 
    f.read(s, 200, 1) 

    var a = s.split("\n") 
    s = a[2] 
    t: string = "" 
    for var i = 0 to s.length 
     if s[i] <= '9' && s[i] >= '0' 
      t += s[i].to_string() 
    return int.parse(t)/1000 

Hinweis, wie ich die Zeichenfolge 200 charaters mit while s.length < 200 do s += " " zuzuteilen Bytes in dieser Zeichenfolge aus der Datei zu lesen? Gibt es eine bessere Möglichkeit, die Länge einer Zeichenkette auf N Zeichen in Genie anders als N-mal das Leerzeichen anzuhängen?Ändern der Länge einer Saite (Allokierung von Speicher für Zeichen)

Antwort

2

Wahrscheinlich ist die beste Möglichkeit, ein Array fester Größe als Puffer zu erstellen und den Puffer auf eine Zeichenfolge zu konvertieren. Dies vermeidet einige Warnungen C beim Kompilieren:

[indent=4] 
uses 
    Posix 

init 
    print(@"Available memory: $(get_avail_mb()) MB") 

def get_avail_mb():int 
    f:FILE = FILE.open("/proc/meminfo","r") 
    buffer:uint8[200] 
    f.read(buffer, 200, 1) 

    result:int = 0 
    match_result:MatchInfo 
    if (/^MemAvailable:\s*([0-9]*).*$/m.match(
              (string)buffer, 
              0, 
              out match_result 
              )) 
     result = int.parse(match_result.fetch(1))/1000 
    return result 

Alternativ Sie string.nfill() könnten versuchen:

[indent=4] 
uses 
    Posix 

init 
    print(@"Available memory: $(get_avail_mb()) MB") 

def get_avail_mb():int 
    f:FILE = FILE.open("/proc/meminfo","r") 
    s:string = string.nfill(200, ' ') 
    f.read(s, 200, 1) 

    result:int = 0 
    match_result:MatchInfo 
    if (/^MemAvailable:\s*([0-9]*).*$/m.match(
              s, 
              0, 
              out match_result 
              )) 
     result = int.parse(match_result.fetch(1))/1000 
    return result 
Verwandte Themen