Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2016, 21:42   #1
Veryky
Новичок
Джуниор
 
Регистрация: 12.03.2016
Сообщений: 1
По умолчанию Все данные от определенной даты

У меня есть txt файл с кучей строк
Код:
Id    Name  Quantity  Price   Date
  3     Milk    2        100   23-08-15
Кнока btnDat_Click показывает в отдельном листбоксе все даты. Потом мне надо чтобы я выбрал какую то дату из списка и нажал на кнопку btnDataToTb_Click и мне показало все продукты с того дня(id Name quantity и Price).

Код:
char[] cc = new char[500]; int i, nr;
string[] lines = new string[250];

public void btnRead_Click(object sender, EventArgs e)
{
        string FileName = textBox1.Text;
        FileStream r_stream = new FileStream(FileName, FileMode.Open, FileAccess.ReadWrite);
        StreamReader reads_string_from_r_stream = new StreamReader(r_stream);

        i = 0;
        listBox1.Items.Clear();
        listBox2.Items.Clear();

        for (; ; i++)
        {
            textBox1.Text = reads_string_from_r_stream.ReadLine();
            lines[i] = textBox1.Text;
            listBox1.Items.Add(lines[i]);
            listBox2.Items.Add(lines[i]);

            if (reads_string_from_r_stream.EndOfStream.Equals(true)) goto nn;       
        }
nn:
        textBox2.Text = reads_string_from_r_stream.EndOfStream.ToString();
        r_stream.Close();

        nr = listBox1.Items.Count;
        textBox6.Text = nr.ToString();
}

private void SelectPath_Click(object sender, EventArgs e)
{
    OpenFileDialog openFile1 = new OpenFileDialog();
    openFile1.Filter = "Text Files|*.txt";
    if (openFile1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    textBox1.Text = openFile1.FileName;
}

public void button1_Click(object sender, EventArgs e)
{
    int n = Convert.ToInt16(textBox6.Text);
    ListB.Items.Clear();
    for (i = 0; i < n; i++)
    {
        ListB.Items.Add(lines[i]);
    }
}

private void btnDat_Click(object sender, EventArgs e)
{
    int n = Convert.ToInt16(textBox6.Text);
    for (i = 0; i < n; i++)
    {
        if(! listDate.Items.Contains(lines[i].Split('\t')[lines[i].Split('\t').Length - 1]))
        {
            listDate.Items.Add(lines[i].Split('\t')[lines[i].Split('\t').Length - 1]);
        }
    }
    listData.Items.RemoveAt(0);
}

private void btnDataToTb_Click(object sender, EventArgs e)
{
    if (listData.SelectedItems.Count > 0)
    {
        string data = listData.SelectedItem.ToString();

        string[] date = data.Split('-');
        int day = Convert.ToInt32(date[0]);
        int month = Convert.ToInt32(date[1]);
        int year = Convert.ToInt32(date[2]);

        DateTime a = new DateTime(year, month, day); 


        for (i = 0; i < listBox2.Items.Count; i++)
        {
            DateTime data2 = DateTime.Parse(lines[i].Split('\t')[lines[i].Split('\t').Length - 1]);
            int result = DateTime.Compare(a, data2);
            if(result == 0)
            listBox3.Items.Add(string.Format("{0}\t{1}\t{2}\t{3}", lines[i].Split('\t')[0], lines[i].Split('\t')[1], lines[i].Split('\t')[2], lines[i].Split('\t')[3]));
        }




    }
    else
    {
        MessageBox.Show("Select a date");
    }




}
Veryky вне форума Ответить с цитированием
Старый 12.03.2016, 23:06   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Зачем goto в первом цикле? Не проще break или это условие в while?

И в этом примере строки нет табов, только пробелы.


Код:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;

namespace ConsoleApplication23
{
    public class Item
    {
        public int Id { get; set; }

        public string Name { get; set; }

        public int Quantity { get; set; }

        public int Price { get; set; }

        public DateTime Date { get; set; }

        public override string ToString()
        {
            return string.Format("Id: {0}, Name: {1}, Quantity: {2}, Price: {3}, Date: {4}", Id, Name, Quantity, Price, Date);
        }
    }

    class Program
    {
        static List<Item> ReadItems(string filePath)
        {
            string text = File.ReadAllText(filePath);

            var items = new List<Item>();

            var lines = text.Split(new[] {"\r\n", "\n"}, StringSplitOptions.RemoveEmptyEntries);

            for (int i = 1; i < lines.Length; i++)
            {
                var line = lines[i];

                var values = line.Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries);

                try
                {
                    if (values.Length != 5)
                        throw new Exception("not enough values");

                    var item = new Item()
                    {
                        Id = int.Parse(values[0]),
                        Name = values[1],
                        Quantity = int.Parse(values[2]),
                        Price = int.Parse(values[3]),
                        Date = DateTime.ParseExact(values[4], "dd-MM-yy", CultureInfo.InvariantCulture)
                    };

                    items.Add(item);
                }
                catch (Exception ex)
                {
                    throw new Exception(String.Format("incorrect line {0}: {1}", line, ex.Message));
                }
            }

            return items;
        }

        static void Main(string[] args)
        {
            string filePath = "1.txt";

            File.WriteAllText(filePath,
@"Id    Name  Quantity  Price   Date
  3     Milk    2        100   23-08-15
  4     Bread    2        200   28-08-15
  5     Sugar    2        100   23-08-15"
);

            var items = ReadItems(filePath);

            DateTime requestedDate = new DateTime(2015, 8, 23);

            var itemsForDate = items.Where(it => it.Date == requestedDate.Date);

            foreach (var item in itemsForDate)
            {
                Console.WriteLine(item);
            }

        }
    }
}
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 13.03.2016 в 00:40.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проект в Паскале: создать таблицу, в которой будут записаны даты, фамилии и пропуски учащихся определенной группы Таня Хорошая Помощь студентам 4 19.04.2014 12:24
отслеживать все Check In для определенной Facebook page Glen HTML и CSS 3 18.01.2013 01:26
Работа программы до определенной даты Pound Общие вопросы Delphi 13 06.12.2009 03:19
Как в таблицу в ячейку вставить данные даты MonthCalendar1 mnbvcxz11 БД в Delphi 2 11.08.2009 23:59