none
C# 關於時間的範圍 RRS feed

  • 問題

  • 觀念不夠好,爬文爬半天還是不懂

    想要從許多個txt檔找自己要的資料

    該怎麼寫才對

    以下為範例檔案

    (201509011026.txt),(201509021156.txt),(201509032200.txt),(201509041542.txt),(201509051684.txt),(201509061142.txt)

    如果我只是想要取20150902到20150905之間的txt檔

    並且把這些檔案全部顯示在textbox內

    indexof似乎只是告知文字檔內文字或字元的位置

    感恩

    2015年9月14日 上午 02:15

所有回覆

  • 直接把時間轉成字串當成檔名去抓就行了

    或是反過來把檔名轉回時間看是否落在你的條件內

    http://www.dotblogs.com.tw/chhuang/archive/2008/03/18/1921.aspx

    2015年9月14日 上午 02:19
  • Hi,

    可使用下列方法

    DirectoryInfo dir = new DirectoryInfo(path);
    FileInfo[] files = dir.GetFiles();
    files.Where(p => Regex.IsMatch(p.Name, @"2015090[2-5]\.txt")).Dump("方法1結果");
    files.Where(p => { 
    	var name = p.Name.Substring(0, 8);
    	int d;
    	if (int.TryParse(name, out d) == false)
    	{
    		return false;
    	}
    	return d >= 20150902 && d <= 20150905;
    }).Dump("方法2結果");

    2015年9月14日 上午 02:57
  • 您好,

    可以參考以下文章的方式,

    Directory.GetFiles() based on Date Range


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2015年9月14日 上午 03:38
  • 問的不夠詳細再問一次~"~

    using(var output =new StreamWriter(@"C:\text\all.txt))

    foreach(var file in Directory.GetFiles(@\\192.168.xx.xx\d$\txt\log,"*.txt"))

    using(var input = new StreamReader(file))

    {

    output.WriteLine(input.ReadToEnd());

    break;

    以上是個人寫的程式,作用是先將需要的檔案透過網路芳鄰抓到本機(一開始的這些檔案就是在本機內),並且合併

    至於裡面的內容每一行前面一定是日期與時間(例如:201508162230___等等之類)

    個人打算用兩個datetimepicker選取需要的範圍,並將屬於這範圍內的資料顯示在textbox內

    目前有兩個想法,一是只抓需要的檔案丟回本機合併後在顯示到textbox內,另一個則是先全部抓過來再選擇需要的檔案

    能給些建議嗎(對新手來說比較好處理的方式@@)

    2015年9月14日 上午 06:02
  • 您好,

    請問檔案是每日一個檔案還是不一定呢?

    或許可以先讀取 檔案 的建立、修改日期來做第一層的篩選。


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2015年9月14日 上午 06:43
  • 不一定,只有發生異常的時候才會有紀錄,如果當天沒有任何的資料就不會有當日的資料

    我現在就是卡在如何先選擇所需要的檔案(嘗試了很多爬了很久還是沒下文阿)~"~

    2015年9月14日 上午 07:36
  • 你原本的寫法就行了啊,GetFiles()只是抓檔名而已,過濾之後再讀檔

    除非你網路傳輸真的很慢,不然這樣寫就夠了

    2015年9月14日 上午 08:10
  • 我現在就卡在過濾的動作

    是要另外用一個副程式來寫嗎?

    如果用indexof來寫的話有辦法嗎???

    2015年9月14日 上午 08:46
  • DateTime start = Convert.ToDateTime("2015/9/1");
    DateTime end = Convert.ToDateTime("2015/9/2");
    string pattern = @"^\d{8}";
    string[] files = new string[] { "201509011026.txt", "201509021156.txt", "201509032200.txt" };//來源改成GetFiles
    foreach (string item in files)
    {
        DateTime current = default(DateTime);
        if (Regex.IsMatch(item, pattern)
            && DateTime.TryParseExact(Regex.Match(item, pattern).Value, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out current))
        {
            if (current >= start && current < end)
            {
                //讀檔
                string t = item;
            }
        }
    }

    2015年9月14日 上午 08:58
  • 你之前不是有問過類似的問題?

    https://social.msdn.microsoft.com/Forums/zh-TW/e3dee60c-186d-4d91-83bb-daaebf02fda1/10txt?forum=233#b658d333-a789-4531-adb6-30633406c3a1

    如果你是要手動選擇要的檔案範圍...如下。

    你是要手動選嘛? 還是這些檔案在某個資料夾 , 想讓程式自己去抓?

    你可以使用 OpenFileDialog 類別,將屬性 Multiselect 設為 True。

    再加上,上面 code , 指定 FileNames 給 var inputFiles。

    2015年9月14日 上午 09:47
  • 目前已經做到一些成果

    可以獨自方式連線將檔案複製到本機,並且顯示在datagridview上

    也可以透過搜尋日期的方式找到想要的檔案

    但是日期只能是對單一的

    假設以下為txt檔內容

    201510012233__AABBCC

    201510042355__CCBBAA

    201510102235__BBCCAA

    201509231015__ABCCBA

    201508222155__CBAABC

    我可以透過indexof的方式找到我要的檔案

    例如第一個我可以用指定的方式找到

    但如果是範圍的呢?假設我要找10月1號到10月10號

    如何一次找到,有什麼方式可以嗎?

    2015年10月13日 下午 02:57
  • 你是要過濾檔案內容嗎?
    2015年10月14日 上午 02:39
  • 算過濾吧!

    我目前只能做到透過datepicker選擇指定的日期查詢當天是否有資料

    但不知道如何範圍搜尋

    從datepicker1搜尋到datepicker2,這也是一種過濾吧!

    用indexof也可以做到嗎?請指教

    2015年10月14日 下午 12:31
  • 在多請教一個問題

    目前有辦法對單一txt檔顯示到dategridview上

    請問是否可以同時將兩個以上的txt檔案顯示到dategridview

    有什麼可以參考嗎?感恩

    2015年10月14日 下午 12:34
  • 把兩個文字檔的資料都加到一個 List<ABC>   ,

    把datagridview的datasource 設成 List<ABC>,

    其中 ABC 是自訂的class 


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2015年10月17日 上午 03:32