Announcement

Collapse
No announcement yet.

Tìm kiếm trên file (tìm kiếm tuần tự)

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Tìm kiếm trên file (tìm kiếm tuần tự)

    Mình xin post source C# tìm kiếm tuyến tính trên file
    Ở đây mình chỉ viết đơn giản không bắt lỗi nhập, mong nhận được ý kiến của thầy và các bạn
    Code:
    /*
     @author: Đỗ Trọng Ân
    */
    using System;
    using System.IO;
    
    namespace CsharpLinearSearch
    {
        class Program
        {
            static void Main(string[] args)
            {
                string s = "";
                int n;
                StreamWriter wFile = new StreamWriter(@"e:\Test.txt", false);
                Console.WriteLine("Input file : ");
                s = Console.ReadLine();
                wFile.Write(s);
                wFile.Close();
                StreamReader rFile = new StreamReader(@"e:\Test.txt");
                Console.Write("Input the number : ");
                n = int.Parse(Console.ReadLine());
                do
                {
                    if (n == rFile.Read() - 48)
                    {
                        Console.WriteLine("Found");
                        return;
                    }
                } while (rFile.EndOfStream != true);
                Console.WriteLine("Not Found");
                rFile.Close();
            }
        }
    }
    Last edited by BiThuDoan; 06-09-2011, 23:15.

  • #2
    Tình hình là nó đã sai với cái file có nội dung
    "2 3 4 5 6 7 8 9 10"
    Số tìm kiếm là 1
    Còn nữa
    "1 2 3 4 5 6 7 8 9 10"
    Số tìm kiếm là 10

    Comment


    • #3
      Originally posted by 08520021 View Post
      Mình xin post source C# tìm kiếm tuyến tính trên file
      Ở đây mình chỉ viết đơn giản không bắt lỗi nhập, mong nhận được ý kiến của thầy và các bạn
      Code:
      /*
       @author: Đỗ Trọng Ân
      */
      using System;
      using System.IO;
      
      namespace CsharpLinearSearch
      {
          class Program
          {
              static void Main(string[] args)
              {
                  string s = "";
                  int n;
                  StreamWriter wFile = new StreamWriter(@"e:\Test.txt", false);
                  Console.WriteLine("Input file : ");
                  s = Console.ReadLine();
                  wFile.Write(s);
                  wFile.Close();
                  StreamReader rFile = new StreamReader(@"e:\Test.txt");
                  Console.Write("Input the number : ");
                [B]  n = int.Parse(Console.ReadLine());[/B]
                  do
                  {
                      if ([COLOR="red"][B]n == rFile.Read() - 48[/B][/COLOR])
                      {
                          Console.WriteLine("Found");
                          return;
                      }
                  } while (rFile.EndOfStream != true);
                  Console.WriteLine("Not Found");
                  rFile.Close();
              }
          }
      }
      Tại sao phải đổi sang int để rồi mất công thực hiện phép trừ khó hiểu này?
      Code:
      s == rFile.ReadLine()
      chẳng phải đơn giản hơn sao?
      Last edited by 07520004; 06-09-2011, 23:57.

      Comment


      • #4
        Originally posted by 07520004 View Post
        Code:
        s == rFile.ReadLine()
        Thế này thì nó luôn trả về kết quả là true. Vậy là luôn luôn in ra là "Found".
        Do ở trên vừa mới WriteLine nguyên string s vào file đó.

        Comment


        • #5
          Originally posted by 09520540 View Post
          Thế này thì nó luôn trả về kết quả là true. Vậy là luôn luôn in ra là "Found".
          Do ở trên vừa mới WriteLine nguyên string s vào file đó.
          Viết bừa một biến không ngờ trùng với cái biến ở trên rồi =)), coi như ignore cái code trong post #3 đi. Tinh thần vẫn là write vào cái gì thì search cái đó, write vào file một chuỗi thì đừng tìm một số int trừ khi đề yêu cầu tìm số trong chuỗi.
          Last edited by 07520004; 07-09-2011, 00:01.

          Comment


          • #6
            Đối với bài này.
            Bạn không nên dùng phương thức Read ,bỏi vì nó đọc ra tưng kí tự trong file . Nên xảy ra lỗi như bạn trên nói.
            VD: file chứa "2 3 4 12" và search số 1 đúng ra là phải là không tìm thấy,nhưng kết quả lại là tìm thấy vì nó đọc lần lượt từng kí tự 1 từ file ra
            Nên nó sẽ đọc được kí tự 1 ( trong sô "12" ) nên trả về kết quả tìm thấy.
            Cách giai quyết:
            - Đọc từng line ReadLine() cho tới khi đọc đc null thì ngừng. Bạn tách chuỗi đọc từng dựa vào kí tự khoẳng trắng . Sau đó Convert từng chuỗi con sang int và so sánh
            PHP Code:
            using System;
            using System.Collections.Generic;
            using System.Linq;
            using System.Text;
            using System.IO;

            namespace 
            ConsoleApplication1
            {
                class 
            Program
                
            {
                    static 
            void Main(string[] args)
                    {
                        
            string s "";
                        
            int n;
                        
            StreamWriter wFile = new StreamWriter(@"D:\Test.txt",false);
                        
            Console.WriteLine("Input file : ");
                        
            Console.ReadLine();
                        
            wFile.Write(s);
                        
            wFile.Close();
                        
            StreamReader rFile = new StreamReader(@"D:\Test.txt");
                        
            Console.Write("Input the number : ");
                        
            int.Parse(Console.ReadLine());

                        while ((
            s=rFile.ReadLine())!=null)
                        {
                            
            String[] sl s.Split(' ');
                            foreach(
            String str in sl)
                            {
                                if (
            str.Length>0&&== Convert.ToInt32(str))
                                {
                                    
            Console.WriteLine("Found");
                                    return;
                                }
                            }
                        };
                        
            Console.WriteLine("Not Found");
                        
            rFile.Close();
                    }
                }

            - Sử dụng BinaryReader để đọc lần lượt các số Int từ file ra ( BinaryReader có hỗ trợ hàm)
            PHP Code:
            using System;
            using System.Collections.Generic;
            using System.Linq;
            using System.Text;
            using System.IO;

            namespace 
            ConsoleApplication1
            {
                class 
            Program
                
            {
                    static 
            void Main(string[] args)
                    {
                        
            string s "";
                        
            int n;
                        
            StreamWriter wFile = new StreamWriter(@"D:\Test.txt",false);
                        
            Console.WriteLine("Input file : ");
                        
            Console.ReadLine();
                        
            wFile.Write(s);
                        
            wFile.Close();
                        
            FileStream fs = new FileStream(@"D:\Test.txt"FileMode.Open);
                        
            BinaryReader rFile =new BinaryReaderfs);
                        
            Console.Write("Input the number : ");
                        
            int.Parse(Console.ReadLine());
                        
                        while (
            true)
                        {
                            try
                            {
                                if (
            == rFile.ReadInt32())
                                {
                                    
            Console.WriteLine("Found");
                                    
            rFile.Close();
                                    
            rFile null;
                                    
            fs null;
                                    return;
                                }
                            }
                            catch (
            System.Exception ex)
                            {
                                break;
                            }
                        };
                        
            Console.WriteLine("Not Found");
                        
            rFile.Close();
                        
            rFile null;
                        
            fs null;
                    }
                }

            Last edited by Guest; 07-09-2011, 00:37.

            Comment


            • #7
              Originally posted by tauit_dnmd View Post
              Đối với bài này.
              Bạn không nên dùng phương thức Read ,bỏi vì nó đọc ra tưng kí tự trong file . Nên xảy ra lỗi như bạn trên nói.
              VD: file chứa "2 3 4 12" và search số 1 đúng ra là phải là không tìm thấy,nhưng kết quả lại là tìm thấy vì nó đọc lần lượt từng kí tự 1 từ file ra
              Nên nó sẽ đọc được kí tự 1 ( trong sô "12" ) nên trả về kết quả tìm thấy.
              Cách giai quyết:
              - Đọc từng line ReadLine() cho tới khi đọc đc null thì ngừng. Bạn tách chuỗi đọc từng dựa vào kí tự khoẳng trắng . Sau đó Convert từng chuỗi con sang int và so sánh
              PHP Code:
              using System;
              using System.Collections.Generic;
              using System.Linq;
              using System.Text;
              using System.IO;

              namespace 
              ConsoleApplication1
              {
                  class 
              Program
                  
              {
                      static 
              void Main(string[] args)
                      {
                          
              string s "";
                          
              int n;
                          
              StreamWriter wFile = new StreamWriter(@"D:\Test.txt",false);
                          
              Console.WriteLine("Input file : ");
                          
              Console.ReadLine();
                          
              wFile.Write(s);
                          
              wFile.Close();
                          
              StreamReader rFile = new StreamReader(@"D:\Test.txt");
                          
              Console.Write("Input the number : ");
                          
              int.Parse(Console.ReadLine());

                          while ((
              s=rFile.ReadLine())!=null)
                          {
                              
              String[] sl s.Split(' ');
                              foreach(
              String str in sl)
                              {
                                  if (
              str.Length>0&&== Convert.ToInt32(str))
                                  {
                                      
              Console.WriteLine("Found");
                                      return;
                                  }
                              }
                          };
                          
              Console.WriteLine("Not Found");
                          
              rFile.Close();
                      }
                  }

              - Sử dụng BinaryReader để đọc lần lượt các số Int từ file ra ( BinaryReader có hỗ trợ hàm)
              PHP Code:
              using System;
              using System.Collections.Generic;
              using System.Linq;
              using System.Text;
              using System.IO;

              namespace 
              ConsoleApplication1
              {
                  class 
              Program
                  
              {
                      static 
              void Main(string[] args)
                      {
                          
              string s "";
                          
              int n;
                          
              StreamWriter wFile = new StreamWriter(@"D:\Test.txt",false);
                          
              Console.WriteLine("Input file : ");
                          
              Console.ReadLine();
                          
              wFile.Write(s);
                          
              wFile.Close();
                          
              FileStream fs = new FileStream(@"D:\Test.txt"FileMode.Open);
                          
              BinaryReader rFile =new BinaryReaderfs);
                          
              Console.Write("Input the number : ");
                          
              int.Parse(Console.ReadLine());
                          
                          while (
              true)
                          {
                              try
                              {
                                  if (
              == rFile.ReadInt32())
                                  {
                                      
              Console.WriteLine("Found");
                                      
              rFile.Close();
                                      
              rFile null;
                                      
              fs null;
                                      return;
                                  }
                              }
                              catch (
              System.Exception ex)
                              {
                                  break;
                              }
                          };
                          
              Console.WriteLine("Not Found");
                          
              rFile.Close();
                          
              rFile null;
                          
              fs null;
                      }
                  }

              Cảm ơn pro, còn phải học hỏi nhiều

              Comment

              LHQC

              Collapse
              Working...
              X