2

私は現在、入力がテキストファイルからのものになる課題に取り組んでいます。私が直面している問題は、入力を収集する方法を見つけながら、それを分割して、関連するすべてのデータがあることを確認することです。

入力は次のとおりです。

入力 1: 12.49 で本 1 冊 14.99 で音楽 CD 1 枚 0.85 でチョコレートバー 1 枚

入力 2: 10.00 で輸入されたチョコレート 1 箱 47.50 で輸入された香水 1 本

入力 3: 27.99 で輸入香水 1 本 18.99 で香水 1 本 9.75 で頭痛薬 1 パケット 11.25 で輸入チョコレート 1 箱

最初の番号、輸入品かどうか、名前 (つまり、香水のボトル) と価格を保持する必要があります。どんな提案も素敵です正規表現が答えだと確信していますが、インポートされた場合に残りが同じように読み取られるようにする方法がよくわかりません。

4

1 に答える 1

0

まあ、あなたは自分でそれを行うことも、怠け者で次のコードを使用することもできます:

var string = "1 book at 12.49 1 music CD at 14.99 1 chocolate bar at 0.85";

var data = getArray(string);

console.debug(data);

function getArray(string){
    //prepare the string
    //adding terminators (";")
    string = string.replace(/(at) ([0-9]*).([0-9]*)/g,"$1 $2.$3;");
    string = string.replace(/; /g,";"); //remove whitespace after terminators
    string = string.substring(0,string.length-1); //remove last terminator

    var split = string.split(";"); //split it up
    var data = new Array();

    //loop through objects
    for(var i=0;i<split.length;i++){
        data[i] = new Array();

        var subData = split[i].split(" ");

        data[i]['count'] = subData[0]; //0 is count
        data[i]['price'] = subData[subData.length-1]; //last is price
        data[i]['article'] = "";
        for(var j=1;j<subData.length-2;j++){ //in between is the name (minus the "at")
            data[i]['article'] += subData[j] + " ";
        }
    }

    return data //and done
}

jsFiddle: http://jsfiddle.net/3sNBJ/1/

...もっと良い解決策があると思いますが、正規表現もあまり得意ではありません...

[編集] ...ああ、インポートも必要な値です...まあ、http://jsfiddle.net/3sNBJ/3/

[edit2] ...今UIで: http://jsfiddle.net/3sNBJ/5/

于 2013-09-17T09:28:55.177 に答える