Haskell ::将文本解析为List列表

时间:2017-12-04 09:15:48

标签: list haskell text-parsing

大家好,

我正在解析一个如下所示的文本文件:

    wvList = (WebView) view.findViewById(R.id.wv);
    wvList .setHorizontalScrollBarEnabled(false);
    wvList .getSettings().setJavaScriptEnabled(true);
    wvList .getSettings().setDomStorageEnabled(true);
    wvList .addJavascriptInterface(new WebAppInterface(mContext), "Android");
    wvList .setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            view.loadUrl(request.getUrl().toString());
            return false;
        }
    });



public class WebAppInterface {
    Context mContext;

    /**
     * Instantiate the interface and set the context
     */
    WebAppInterface(Context cxt) {
        mContext = cxt;
    }

    /**
     * Show a SnackBar from the web page
     */
    @JavascriptInterface
    public void showMessage(String msg) {
        wvList .post(new Runnable() {
        @Override
        public void run() {
            wvList .clearHistory();// Not working
            wvList .loadURL(url.toString);
        }
    });
    }
}

希望它可以这样读:

114.474998474121 15.7440004348755 25.806999206543 -873 172 182 188 
114.46199798584 15.7419996261597 25.8799991607666 -1396 180 192 205 

目前我的文本解析代码并没有给出。这是我的代码:

[[114.475,15.744,25.807,-873.0,172.0,182.0,188.0],
[114.462,15.742,25.88,-1396.0,180.0,192.0,205.0]]

此代码将所有文本解析为单个列表,如下所示:

main = do
    text <- readFile "mytext.txt" 
    let
        pcVal = map read (words text) :: [Float]
    print pcVal
    return ()

我无法找到如何将整行(在文本文件中)作为列表,第二行作为另一个列表直到文件末尾。感谢有人有这方面的经验。感谢。

2 个答案:

答案 0 :(得分:7)

您可以使用lines功能;例如map words $ lines text

这也是帮助函数的好时机,即

let parse :: String -> [Float]
    parse line = map read $ words line
    pcVal = map parse $ lines text

答案 1 :(得分:0)

感谢Dan建议使用行作为解决方案。以下代码适用于我的问题:

main = do
    text <- readFile "mytext.txt" 
    let
        readparse txtLines = map read txtLines :: [Float]
        parse txtLines = map (words) (lines txtLines)
        pcval = map readparse (parse text) 
    print pcVal
    return ()

希望它也能帮到别人。谢谢,欢呼!