【问题标题】:Changing the length of a string (allocating memory for characters)更改字符串的长度(为字符分配内存)
【发布时间】:2017-03-23 13:31:33
【问题描述】:
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 &lt; 200 do s += " " 将字符串分配给200 个字符以从文件中将字节读入该字符串?除了追加空格字符N次之外,还有没有更好的方法在Genie中将字符串的长度设置为N个字符?

【问题讨论】:

    标签: genie


    【解决方案1】:

    可能最好的方法是创建一个固定大小的数组作为缓冲区并将缓冲区转换为字符串。这避免了编译时的一些 C 警告。用valac --pkg posix example.gs编译:

    [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
    

    【讨论】:

    • 使用行编译:valac --pkg posix string.gs
    【解决方案2】:

    是的,只是避免无法处理某些极端情况的可怕 for 循环!

    【讨论】:

      猜你喜欢
      • 2020-09-06
      • 2020-01-29
      • 1970-01-01
      • 2018-11-26
      • 1970-01-01
      • 2012-11-20
      • 2011-03-22
      • 1970-01-01
      • 2021-07-27
      相关资源
      最近更新 更多