Разбор текста из файла .txt, загруженного в память в нужном формате C # - PullRequest
1 голос
/ 19 октября 2011

довольно новый для C # здесь ...


... То, что я пытаюсь сделать, это проанализировать кучу текста на веб-странице из файла .txt, загруженного в память.

Вот как выглядит файл .txt


.RES B7=121
.RES C12=554
.RES VMAX=4.7μV

Опять-таки, он продолжается примерно еще 50 или около того .RES '... У меня успешно получилосьэто разобрать, но не в нужном формате ...
Вот как я хочу, чтобы это выглядело на веб-странице



B7.........121
C12.........554
VMAX.........4.7μV

все внутри скрытой панелис id = "outpt" ... который в настоящее время установлен на visible = "false"


Вот код, который я использую на моей странице C #

namespace Sdefault
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected void btnUpld_Click(object sender, EventArgs e)
        {
            Stream theStream = file1.PostedFile.InputStream; //uploads .txt file     to memory for parse

            using (StreamReader sr = new StreamReader(theStream))
            {
                string tba;
                while ((tba = sr.ReadLine()) != null)
                {

                    string[] tmpArray = tba.Split(Convert.ToChar("=")); //Splits ".RES B7=121" to "B7"... but for some reason, It prints it as
                                                                        //".RES B7.RES C12.RES VMAX"... I would ultimately desire it to be printed as shown above




                    Response.Write(tmpArray[0].ToString());
                    var.Text = tba;
                    outpt.Visible = true;
                }

            }

        }
    }

}

Какие-нибудь указатели, в каком направлении я должен пойти с этим?

Ответы [ 5 ]

3 голосов
/ 19 октября 2011
// Open the file for reading
using (StreamReader reader = new StreamReader((Stream)file1.PostedFile.InputStream))
{
  // as long as we have content to read, continue reading
  while (reader.Peek() > 0)
  {
    // split the line by the equal sign. so, e.g. if:
    //   ReadLine() = .RES B7=121
    // then
    //   parts[0] = ".RES b7";
    //   parts[1] = "121";
    String[] parts = reader.ReadLine().split(new[]{ '=' });

    // Make the values a bit more bullet-proof (in cases where the line may
    // have not split correctly, or we won't have any content, we default
    // to a String.Empty)
    // We also Substring the left hand value to "skip past" the ".RES" portion.
    // Normally I would hard-code the 5 value, but I used ".RES ".Length to
    // outline what we're actually cutting out.
    String leftHand = parts.Length > 0 ? parts[0].Substring(".RES ".Length) : String.Empty;
    String rightHand = parts.Length > 1 ? parts[1] : String.Empty;

    // output will now contain the line you're looking for. Use it as you wish
    String output = String.Format("<label>{0}</label><input type=\"text\" value=\"{1}\" />", leftHand, rightHand);
  }

  // Don't forget to close the stream when you're done.
  reader.Close();
}
2 голосов
/ 19 октября 2011

Не уверен в вашем форматировании, но простой Split and Format поможет вам.

На вашем разделении вы получаете все до знака =, тогда как из вашего описания вы хотите все после него.например,

while(...)
{
   var line = String.Format("<label>{0}< />.........textbox>{0}< />",tba.Split('=')[1]);
   Response.Write(line);
}
1 голос
/ 19 октября 2011

Хорошо .. у вас есть несколько проблем здесь ..

сначала вы разделяете, используя = .. поэтому вы разделяете строку на две части ... .RES B7 = 121 приходит к: tmpArray [0] = .RES B7 tmpArray [1] = 121

Чтобы избежать повторного разбиения, лучше всего заменить .RES на пустую строку:

tmpArray[0] = tmpArray[0].replace(".RES","");

Затем вы должны показать это где-то на своей странице, поэтому вы должны написать:

Response.Write("<label>" + tmpArray[0].ToString() + "< />" + "<textbox>" + tmpArray[1].ToString() + "< />");
1 голос
/ 19 октября 2011

если вы возьмете .RES B7 = 121 и разделите его на «=», тогда индекс 0 будет .RES B7, а индекс один будет 121

если вы хотите еще больше поделить, вам придется снова разделить индекс 0, используя Chr (32), что даст .RES как 0 и B7 как 1.

Может быть встроено, как указано выше, с форматированием строки.

Похоже, вы хотите что-то вроде

String.Format("<label>{0}< />.........textbox>{1}< />",tba.Split('=')[0].Split(' ')[1],tba.Split('=')[1].);
0 голосов
/ 19 октября 2011

Похоже, вам нужно сделать 2 разбиения:

1-й var tmpArr1 = tba.Split(' ') приведет к массиву строк {".RES","B7=121"}

2-й var tmpArr2 = tmpArr1[1].split('=') приведет к массиву строк {"B7","121"}

Тогда вы можете сделать:

   var line = String.Format("<label>{0}</label><textbox>{1}</textbox>",tmpArr2[0],tmpArr2[1]);
   Response.Write(line);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...