0

私の質問は、テキスト ファイルから継続データを取得することです。これは問題の説明です:

私の要件は、各行をテキスト ファイルに保存することです。このテキスト ファイルは、外部ソースから不明な間隔でフィードされます。また、最も重要なことは、ファイルが (たとえば) 100 行に達すると、これらの行を到達不能なソースにアーカイブし、その内容をクリアすることです。

リスナーがファイルを覗き、10 行が含まれていることを確認した場合、リスナーはこれらの行を取得して保存します。その後、デルタ時間 (たとえば 1 秒) の後、再びピークを迎え、93 行が表示されます。未収録だった83もセーブ。ここで、リスナーが 3 回目のピークを行うと、3 つの行が表示されます。明らかにそれらは保存されますが、リスナーによって記録されなかった 7 行 (インデックス 94 ~ 100) の欠落があることに注意してください。

一定のデルタを覗いても、ミスが起こらないとは限らないようです。

この要件を達成するための最良の方法をどのように提案しますか?

4

3 に答える 3

0

whileまたはifステートメントを使用して、コレクションの容量(たとえば100)に対してList<string>検証するなど、何らかの形式のコレクションで行を保持できます。List1.Add(line)while(count < capactity)

ファイルへの読み取り/書き込みアクセス権がある場合は、コレクションに追加した後に行を削除できます。

于 2013-03-21T06:16:31.583 に答える
0

これは、ファイルから 1 行ずつデータを取得してデータベースに保存するコードです>>

 string line;
            string[] subLine;
            DialogResult result = openFileDialog1.ShowDialog();
            try
            {
                if (result == DialogResult.OK)
                {
                    string file = openFileDialog1.FileName;
                    StreamReader inputData = new StreamReader(file);
                    const int maxRecords = 500;
                    int actualRecords = 0;
                    while ((line = inputData.ReadLine()) != null)
                    {
                        subLine = line.Split(',');

                        try
                        {


                            string unknown = "unknown Fileld";
                            con.Open();
                            // int j=subLine.Length;
                            //for(int i=0;i<subLine.Length;i++)
                            if (actualRecords < maxRecords)
                            {
                                int i = 0;
                                //int j=subLine.Length;
                                //int index=subLine.Length-j;

                               // SQL= "insert into tradeFile values('" + ID + "','" + subLine[i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + unknown + "')";

                                cmd = new SqlCommand("insert into tradeFile values('" + subLine[i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + unknown + "')", con);
                                // cmd = new OleDbCommand("insert into tradeFile values('" + subLine[i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + unknown + "')", con);
                                cmd.ExecuteNonQuery();
                                actualRecords++;
                                //  j--;

                            }
                            else
                            {
                                int i = 0;
                                //int j=subLine.Length;
                                //int index=subLine.Length-j;
                                cmd = new SqlCommand("insert into tradeFile values('" + subLine[i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + unknown + "')", con);
                                //cmd = new OleDbCommand("insert into tradeFile values('" + subLine[i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + subLine[++i].ToString() + "','" + unknown + "')", con);
                                cmd.ExecuteNonQuery();
                                actualRecords = 0;
                            }





                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message);
                        }
                        finally
                        {
                            con.Close();
                        }
                        //counter++;
                    }
                    inputData.Close();
                }
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

さらにロジックを適用して、役立つことを願っています。

于 2013-03-21T06:05:56.933 に答える
0

さらに別のファイル操作の詳細については、ここをクリックしてください

C# でのファイル操作

于 2013-03-21T06:10:38.110 に答える