質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

1回答

1370閲覧

リストの要素を削除したい

mori_1228

総合スコア8

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2020/01/15 11:10

taglist.csv

熱血/感動/格好良い/面白い/友情 面白い/友情/格好良い/楽しい/可笑しく笑える 面白い/格好良い/熱血/楽しい/友情 考えさせられた/面白い/感動/格好良い/熱血 面白い/可笑しく笑える/楽しい/格好良い/感動

一部抜粋したものですが、上記のようにtaglist.csvが8千行ありましてその要素3を抽出し、一つのリストにまとめたプログラムを作っております。

C#

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using static System.Console; 5 6namespace Taglist 7{ 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); 13 14 try 15 { 16 // csvファイルを開く 17 using (var sr = new System.IO.StreamReader(@"D:tagList.csv", System.Text.Encoding.GetEncoding("shift-jis"))) 18 { 19 //配列をリストに変換 20 List<string> stringList = new List<string>(); 21 22 //csvの最大行取得 23 string[] lines = File.ReadAllLines(@"D:tagList.csv"); 24 string val1 = "^日本"; 25 26 for (int i = 0; i <= 4; i++) 27 { 28 // ファイルから一行読み込む 29 var line = sr.ReadLine(); 30 31 // 読み込んだ一行をカンマ毎に分けて配列に格納する 32 var tagget = line.Split(','); 33 34 //tagget[3]を/毎に分けて配列に格納 35 var tagget2 = tagget[3].Split('/'); 36 37 38 //配列をリストに変換 39 List<string> stringList = new List<string>(); 40 stringList.AddRange(tagget2); 41 //複数の要素をlistにまとめて追加 42 stringList.AddRange(tagget2); 43 44 if (stringList.Contains(val1)) 45 { 46 stringList.Remove(val1); 47 } 48 49 50 } 51              IEnumerable<string> result = stringList.Distinct(); 52 Console.WriteLine("[{0}]", string.Join(", ", result)); 53 54 } 55 } 56 catch (System.Exception e) 57 { 58 // ファイルを開くのに失敗したとき 59 System.Console.WriteLine(e.Message); 60 } 61 } 62 } 63}

出力結果としては
[熱血, 感動, 格好良い, 面白い, 友情, 楽しい, 可笑しく笑える, 考えさせられた, 怖い, 涙流した, びっくり, 勉強になった, 可 愛い, 悲しい, 美しい, ロマンチックな気分, 勇気貰った, セクシー, 道徳心&モラル, 日本 開始日:2014, 09, 09(火) まんがタイムきらら 2014年10月号, 日本 開始日:1994 ビッグコミック , 終了日:1995]
となりました。

しかし、関係のない要素もまざっており、道徳心&モラル以降の要素を削除したいプログラムを作成したいのですが、正規表現を使ってみたり、RemoveRangeが使えるんじゃないかと思いつく限り試してみましたが上手くいきませんでした。
何か良い方法がありましたら、ご教授お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2020/01/15 12:48

サンプルデータが「,」でsplitできないですし、「道徳心&モラル, 日本 開始日:2014, 09, 09(火) まんがタイムきらら 2014年10月号, 日本 開始日:1994 ビッグコミック , 終了日:1995」がどうやってまぎれてきたかも分かりません。何を基準に削除しようというのでしょうか。
guest

回答1

0

ベストアンサー

確実にちゃぶ台返しをくらうと思いますが、今の仕様では先頭18個を取る、以外の基準がありません。

csharp

1stringList.Distinct().Take(18);

投稿2020/01/15 12:49

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mori_1228

2020/01/15 13:04

説明不足で申し訳ございません。takeを使うことによって解決することができました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問