如何从文本文件中读取字符串后解析它

时间:2014-11-23 03:33:26

标签: c# regex string parsing

假设我有一个包含“1书价12.00美元”的文本文件。我想读一下这个刺痛 并设置我的局部变量,如int quantity,string product_type,Double price等。 读取文件后,我的变量值应为

quantity  = 1;
product_type  = Book;
price = 12.00;

你能建议我怎么做吗?

3 个答案:

答案 0 :(得分:1)

您是否有理由要求使用文本文件存储数据? XML将是存储和解析此类数据的更好,更简单的方法。

<Books>
    <Book>
        <Quantity>1</Quantity>
        <Price>12</Price>
    </Book>
</Books>

有很多选项可以解析这个问题。您可以使用XMLDocument,XMLReader,XElement等加载此文件并解析单个元素。如果在文本文件中添加更复杂的数据,基于索引的字符串操作往往会变得难看且容易出错。

答案 1 :(得分:1)

您可以使用XML,也可以查找JSON Here

语法非常简单,而且比XML更轻量级。

您可以直接将其读入Class Objects。

JSON的示例: -

[
    {
        "Qty": 1,
        "ProductType": "Book",
        "Price": 12.01
    },
    {
        "Qty": 1,
        "ProductType": "Pen",
        "Price": 12.01
    }
]

这是一个代码段。您需要添加对Newtonsoft JSON的引用。

using System;
using System.Collections.Generic;
using System.IO;
using Newtonsoft.Json;

namespace JSONExample
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            LoadJson();
        }

        public static void LoadJson()
        {
            using (StreamReader r = new StreamReader(@"C:\Users\Derek\Desktop\JSON.txt"))
            {
                string json = r.ReadToEnd();
                List<Product> dataFile = JsonConvert.DeserializeObject<List<Product>>(json);

                foreach (var product in dataFile.ToArray())
                {
                    Console.WriteLine("Type: {0} - Price: {1} - Quantity: {2}", product.ProductType, product.Price,
                        product.Qty);
                }
            }

            Console.ReadKey();
        }
    }



    public class Product
    {
        public int Qty { get; set; }
        public string ProductType { get; set; }
        public float Price { get; set; }
    }

}

答案 2 :(得分:-1)

 string str = "1 Book price $12.00";
 string[] strArray = str.Split(' ');
 int quantity = Convert.ToInt32(strArray[0]);
 string product_type = strArray[1];
 decimal price = Convert.ToDecimal(strArray[3].Replace("$", ""));