リストに厳密に一致する文字列が含まれているかどうかを確認します

clever_bassi

私は次のシナリオを実装するための最も効率的な方法を見つけようとしています:

私はこのようなリストを持っています:

public static IEnumerable<string> ValidTags = new List<string> {
  "ABC.XYZ",
  "PQR.SUB.UID",
  "PQR.ALI.OBD",
};

複数の列を持つ巨大なCSVがあります。列の1つはtagsです。この列には、空白の値、または上記の値のいずれかが含まれています。問題は、タグ列に「ABC.XYZ?@」のような値が含まれている可能性があることです。つまり、有効なタグといくつかの無関係な文字が含まれている可能性がありますこのような列は、有効なタグの1つと厳密に一致するため、有効なタグで更新する必要があります。

例:

  • CSVに含まれている場合はPQR.ALI.OBD?、有効なタグで更新してくださいPQR.ALI.OBD
  • CSVにが含まれている場合PQR.ALI.OBA、これは無効PQR.ALI.OBA-invalidです。無効なサフィックスを追加して更新してください

私はこれを行うための最良の方法を見つけようとしています。

私の現在のアプローチは次のとおりです。

  1. CSVの各列を繰り返し処理し、tagValueを取得します
  2. 次に、tagValueにリストの文字列が含まれているかどうかを確認します
  3. 含まれているが完全に同じではない場合は、含まれている値で更新します。
  4. リストの値が「含まれていない」場合は、suffix-invalidを追加します。

これを行うためのより良い/より効率的な方法はありますか?

更新:

リストには5つのアイテムしかありませんが、ここでは3つを示しました。余分な文字は最後にあります。これは、人々がExcel WebバージョンでそれらのCSVを編集していて、一部のエントリを台無しにしているために発生しています。

私の現在のコード:(これを行うためのより良い方法があると確信しています。C#でも新しいので、これを改善する方法を教えてください)。CSVHelper使用してCSVセルを取得しています。

var record = csv.GetRecord<Record>();
string tag = csv.GetField(10); //tag column number in CSV is 10
/* Criteria for validation:
* tag matches our list, but has extraneous chars - strip extraneous chars and update csv
* tag doesn't match our list - add suffix invalid.*/
int listIndex = 0;
bool valid;
foreach (var validTags in ValidTags) //ValidTags is the enum above
{
    if (validTags.Contains(tag.ToUpper()) && !string.Equals(validTags, subjectIdentifier.ToUpper()))
    {
     valid = true;
     continue; //move on to next csv row.
    //this means that tag is valid but has some extra characters appended to it because of web excel, strip extra charts

    }
    listIndex++; 
    if(listIndex == 3 && !valid) { 
     //means we have reached the end of the list but not found valid tag 
     //add suffix invalid and move on to next csv row
    }
}
Rufus L

余分な文字は最後にあると言い、元のタグが余分な文字の前にまだ存在していると仮定すると、各タグのリストを検索して、タグにリストのエントリが含まれているかどうかを確認できます。一致する場合は、完全に一致しない場合は正しいエントリに更新し、一致しない場合は、「-invalid」タグを追加します。

これを行う前に、最初にリストを降順で並べ替えて、検索時に最も近い(最長の)一致を見つける必要がある場合があります(リスト内の1つのアイテムがリスト内の別のアイテムで始まる場合)。

var csvPath = @"f:\public\temp\temp.csv";
var entriesUpdated = 0;

// Order the list so we match on the most similar match (ABC.DEF before ABC)
var orderedTags = ValidTags.OrderByDescending(t => t);
var newFileLines = new List<string>();

// Read each line in the file
foreach (var csvLine in File.ReadLines(csvPath))
{
    // Get the columns
    var columns = csvLine.Split(',');

    // Process each column
    for (int index = 0; index < columns.Length; index++)
    {
        var column = columns[index];

        switch (index)
        {
            case 0: // tag column
                var correctTag = orderedTags.FirstOrDefault(tag =>
                    column.IndexOf(tag, StringComparison.OrdinalIgnoreCase) > -1);

                if (correctTag != null)
                {
                    // This item contains a correct tag, so 
                    // update it if it's not an exact match
                    if (column != correctTag)
                    {
                        columns[index] = correctTag;
                        entriesUpdated++;
                    }
                }
                else
                {
                    // This column does not contain a correct tag, so mark it as invalid
                    columns[index] += "-invalid";
                    entriesUpdated++;
                }

                break;

            // Other cases for other columns follow if needed
        }
    }

    newFileLines.Add(string.Join(",", columns));
}

// Write the new lines if any were changed
if (entriesUpdated > 0) File.WriteAllLines(csvPath, newFileLines);

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

文字列に厳密に文字列が含まれているかどうかを確認します

分類Dev

文字列に部分文字列のリストが含まれているかどうかを確認し、一致するものを保存します

分類Dev

行にリストの文字列が含まれているかどうかを確認し、一致した文字列を出力する方法

分類Dev

文字列にEnumerable.Rangeフィルタリストの一致が含まれているかどうかを確認します

分類Dev

文字列に文字のリストにない文字が含まれているかどうかを確認し、含まれている場合は、どの文字が一致しないかを判断します。

分類Dev

配列にIDのリストと一致するIDのオブジェクトが含まれているかどうかを確認します

分類Dev

入力リストが厳密に増加しているかどうかを確認します

分類Dev

文字列に(文字列の)リストの要素が含まれているかどうかを確認します

分類Dev

文字列に(文字列の)リストの要素が含まれているかどうかを確認します

分類Dev

文字列に(文字列の)リストの要素が含まれているかどうかを確認します

分類Dev

特定の文字列が文字列のリストに含まれているかどうかを確認します

分類Dev

リストpython内にある文字列が含まれているかどうかを確認します

分類Dev

配列リストに2つの文字列が含まれているかどうかを確認します

分類Dev

配列リストに2つの文字列が含まれているかどうかを確認します

分類Dev

-文字列にパスが含まれているかどうかを確認するときに一致が失敗する

分類Dev

文字列のリストに値が含まれているかどうかを確認します

分類Dev

文字列にリスト要素が含まれているかどうかを確認します

分類Dev

内部リストにFlutterの文字列値が含まれているかどうかを確認します

分類Dev

文字列にリストの要素が含まれているかどうかを確認します

分類Dev

セルの内容にリストの文字列が含まれているかどうかを確認します

分類Dev

リストに「apples」と「oranges」以外の文字列が含まれているかどうかを確認します

分類Dev

文字列にリストの文字列が含まれているかどうかを確認する最速の方法

分類Dev

文字列のリストに部分文字列が含まれているかどうかを確認する方法

分類Dev

あるリストに別のリストに含まれる文字列が含まれているかどうかを確認します

分類Dev

Python:2つのリスト間で文字列が部分的に一致しているかどうかを確認します

分類Dev

Ruby .whereは、配列にクエリと一致しない結果が含まれているかどうかを確認します。

分類Dev

配列リストに特定の文字列が含まれているかどうかを確認する方法

分類Dev

文字列にリストの文字列が含まれていないかどうかを確認します

分類Dev

文字列にPythonのリストの要素が含まれているかどうかを確認する方法

Related 関連記事

  1. 1

    文字列に厳密に文字列が含まれているかどうかを確認します

  2. 2

    文字列に部分文字列のリストが含まれているかどうかを確認し、一致するものを保存します

  3. 3

    行にリストの文字列が含まれているかどうかを確認し、一致した文字列を出力する方法

  4. 4

    文字列にEnumerable.Rangeフィルタリストの一致が含まれているかどうかを確認します

  5. 5

    文字列に文字のリストにない文字が含まれているかどうかを確認し、含まれている場合は、どの文字が一致しないかを判断します。

  6. 6

    配列にIDのリストと一致するIDのオブジェクトが含まれているかどうかを確認します

  7. 7

    入力リストが厳密に増加しているかどうかを確認します

  8. 8

    文字列に(文字列の)リストの要素が含まれているかどうかを確認します

  9. 9

    文字列に(文字列の)リストの要素が含まれているかどうかを確認します

  10. 10

    文字列に(文字列の)リストの要素が含まれているかどうかを確認します

  11. 11

    特定の文字列が文字列のリストに含まれているかどうかを確認します

  12. 12

    リストpython内にある文字列が含まれているかどうかを確認します

  13. 13

    配列リストに2つの文字列が含まれているかどうかを確認します

  14. 14

    配列リストに2つの文字列が含まれているかどうかを確認します

  15. 15

    -文字列にパスが含まれているかどうかを確認するときに一致が失敗する

  16. 16

    文字列のリストに値が含まれているかどうかを確認します

  17. 17

    文字列にリスト要素が含まれているかどうかを確認します

  18. 18

    内部リストにFlutterの文字列値が含まれているかどうかを確認します

  19. 19

    文字列にリストの要素が含まれているかどうかを確認します

  20. 20

    セルの内容にリストの文字列が含まれているかどうかを確認します

  21. 21

    リストに「apples」と「oranges」以外の文字列が含まれているかどうかを確認します

  22. 22

    文字列にリストの文字列が含まれているかどうかを確認する最速の方法

  23. 23

    文字列のリストに部分文字列が含まれているかどうかを確認する方法

  24. 24

    あるリストに別のリストに含まれる文字列が含まれているかどうかを確認します

  25. 25

    Python:2つのリスト間で文字列が部分的に一致しているかどうかを確認します

  26. 26

    Ruby .whereは、配列にクエリと一致しない結果が含まれているかどうかを確認します。

  27. 27

    配列リストに特定の文字列が含まれているかどうかを確認する方法

  28. 28

    文字列にリストの文字列が含まれていないかどうかを確認します

  29. 29

    文字列にPythonのリストの要素が含まれているかどうかを確認する方法

ホットタグ

アーカイブ