2017-03-23 8 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 

while s.length < 200 do s += " "で文字列を200文字に割り当てて、ファイルからこの文字列にバイトを読み込む方法に注意してください。スペース文字をN回追加する以外に、Genieの文字列の長さをN文字に設定する方が良いでしょうか?文字列の長さを変更する(文字を格納するメモリを割り当てる)

答えて

2

おそらく最も良い方法は、固定サイズの配列をバッファとして作成し、そのバッファを文字列にキャストすることです。コンパイルされたとき、これは、いくつかのCの警告を回避:

[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 

また、あなたがstring.nfill()を試みることができる:

[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 
関連する問題