1

.CSVファイル(.csvファイルである必要があります)でStreamReaderを使用してアイテムIDを生成しようとしています。アイテムIDは1000から始まり、上がる必要があります(1001、1002など)。

現在、ユーザーが「Generate ID」を押すと、ファイル全体で値「1000」が検索されます。値が存在しない場合は、テキストボックスに「1000」と書き込まれます。

ヘルプが必要なものは次のとおりです。ファイルに「1000」が含まれている場合は、最後の行を読み取り、1ずつ増やしてから、テキストボックスに値を書き込みます。したがって、最後の値が.csvの1005の場合ファイル、テキストボックスに1006を書き込みたい。

    private void GenerateID_Click(object sender, EventArgs e)
    {
        try
        {
            string searchString = "1000";
            using (StreamReader sr = new StreamReader("file.csv"))
            {
                string line;
                while ((line = sr.ReadLine()) != null)
                {
                    if (line.Contains(searchString))
                    {
                        /* If file contains 1000, read the LAST line
                         * (Whatever number that may be: 1001, 1002, 1003, etc.)
                         * and increase that number by 1, then write to textbox. */
                    }
                    else
                    {
                        invItemIDField.Text = Convert.ToString("1000");
                    }
                }
            }
        }
        catch (Exception)
        {
            MessageBox.Show("The file could not be read");
        }
    }
4

2 に答える 2

3

FileHelpersを使用することをお勧めします。CSVファイルの読み取りに最適なライブラリです。

これをインストールするには、最初にNuGetをインストールする必要があります。インストールしたら、[ツール]>[ライブラリパッケージマネージャー]>[パッケージマネージャーコンソール]に移動します。

NuGetパッケージマネージャー

次に、次のように入力します。Install-Package Filehelpers

行ってよかった!

コードにインポートFileHelpersする

using FileHelpers;

CSVの構造を説明するクラスを作成します。

DelimitedRecord("'")]
public class MyCsv
{
    public int Column1; // Your ID column
    public string SomeOtherColumn; 
}

を作成しますList<MyCsv>

List<MyCsv> myList;

次に、CSVを読み込むには:

FileHelperEngine<MyCsv> engine = new FileHelperEngine<MyCsv>();
myList = new List<MyCsv>(engine.ReadFile("my.csv")); // replace with your filename or variable containing the filename

これで、リストにアクセスしてCSVを読み取ることができますmyList

foreach(MyCsv line in myList) {
    // Do something;
}

そのリスト内の各オブジェクトは、CSVの各行に対応しています。行の最初の列にアクセスするには(foreach上記のループを指定):

line.Column1

したがって、値を比較する必要がある場合は、LINQを使用するか、従来のループ検索を実行できます。

foreach(MyCsv line in myList) {
    if (txtId.Text == line.Column1.ToString()) {
        found = true;
        break;
    }
}

次に、最後の行のIDを取得するには:

myList.[myList.Count - 1].Column1

あなたは残りをすることができます。乾杯!

于 2012-12-10T00:43:45.447 に答える
2

これが私のやり方です、それはあなたのものとはわずかに異なりますが、それは機能します。確かに、引用符で囲まれた要素、改行\ r \ nなど、考慮しなければならないことがあります。

    int TextBoxValue = 1000;
    var reader = new StreamReader(File.OpenRead(@"C:\Users\J\Desktop\New Text Document (4).txt"));
    var contents = reader.ReadToEnd().Split(new string[] {"\r\n"}, StringSplitOptions.None);

    var iValueExists = (from String sLine in contents
                        where sLine.Contains("1000")
                        select sLine).Count();
    if (iValueExists > 0)
    {
        TextBoxValue = int.Parse(contents.Last().Split(new string[] {","}, StringSplitOptions.None).First()) + 1;
    }

    invItemIDField.Text = TextBoxValue;
    reader.Close();

ここに画像の説明を入力してください

于 2012-12-10T00:43:02.960 に答える