CSVで日付の列があるのですが、
それを加工したいです。
できれば、最新順に並べたり、後は該当の日だけ取ってくるようにしたいです。
やり方を教えてください!
CSVで日付の列があるのですが、
それを加工したいです。
できれば、最新順に並べたり、後は該当の日だけ取ってくるようにしたいです。
やり方を教えてください!
thanks, but it doesn’t work for me.
Maybe because I use CSV and the format is string format.
Could you please try this out??
Test.zip (18.4 KB)
Ok, on two parts :
Read CSV :
1 - Get data from CSV
2 - Split it and take only the date
3 - Change it to Date format
4 - Save as a date format
Save CSV :
1 - Build Data Table
2 - Add rows from your array
3 - Save to CSV
Below xaml file
SortDate.zip (14.6 KB)
Let me know if it works for you
こんにちは
例えば「日付」という列に2020/03/04のような形式でデータがある場合、以下の式で降順ソートできます。(ソースがCSVからでも問題なく処理できると思います。)
dt = dt.AsEnumerable.OrderByDescending(function(r) DateTime.ParseExact(r("日付").toString,"yyyy/MM/dd",nothing)).CopyToDataTable()
日付の形式が異なる場合はParseExactメソッドの中の書式"yyyy/MM/dd"を変更する必要があります。
In Japanese, Sorry about that.
ありがとうございます。CSVデータ(String型)からdd/MM/yyyyに変更し、
出力する方法について理解しました。
しかし、今やりたいことは、CSVデータを日付型に変更し、
それをソート(Decending)した状態で出力したいです。
何度も何度も申し訳ございません。
ありがとうございます!試してみました。
2020/03/04ではなく、03/04/2020のような形になっている場合は、うまくいかないですよね?
もし可能であれば、形式を変更するやり方を教えてほしいです。
こんにちは
CSVファイル中のデータが03/04/2020の形式になっているのであれば、先ほどの式中の"yyyy/MM/dd"の部分を"MM/dd/yyyy"とすれば処理可能です。
こんにちは。ありがとうございます。
できました。もしほかに質問ありましたら、させてください!
ありがとうございました!
こんにちは。すいません、もう一点質問させてください。
日付の列で、03/04/2020のような形ではないものが入ってしまっている場合、
エラーを吐きます。(例えば、空欄など)
そういったものを回避して、整列させる方法はございませんでしょうか。
こんにちは
正規表現でMM/dd/yyyy形式のもののみをフィルタする条件を追加してみましたので、お試しください。なお値としてNullが入っている場合は、別にこれを配慮する条件を追加する必要があります。
dt.AsEnumerable.Where(function(r) System.Text.RegularExpressions.Regex.IsMatch(r("日付").toString(),"^\d{2}/\d{2}/\d{4}$" )).OrderByDescending(function(r) DateTime.ParseExact(r("日付").toString,"MM/dd/yyyy",nothing)).CopyToDataTable()
こんにちは。
ありがとうございます。
またあした試してみます。
ちなみにselect関数で条件をしていて、datatableをフィルタリングするとき、
条件に引っかからない場合はエラーを吐きますが、吐かない方法とかないんですかね??
あとdatatableの任意の行に、空白行を挿入する方法とかってありませんかね??
すいませんいろいろ質問してしまいました。
こんにちは
ちなみにselect関数で条件をしていて、datatableをフィルタリングするとき、
条件に引っかからない場合はエラーを吐きますが、吐かない方法とかないんですかね??
単にフィルタリングするだけではエラーにならないはずです。CopyToDataTableメソッドを使用している場合は、対象が空の場合、ここでエラーになります。そのため、CopyToDataTable()する前の出力の行数を数えて、1以上ならCopyToDataTable()を、0なら何もしないようにすればエラーにはなりません。
あとdatatableの任意の行に、空白行を挿入する方法とかってありませんかね??
それ専用のアクティビティはないのでInvoke MethodアクティビティでDataRowCollection.InsertAtメソッドを使用する必要があります。
こんにちは
いつもありがとうございます。
試してみます。
Just ideaなのですが、空のdatatbleを用意しておいて、append rangeでそれを追加するってできますかね?
あとで(datatable型変数).NeWRowで変数を定義し、それをデータ行を追加アクティビティから入れることってできそうですかね??
あとごめんなさい、最後に1点、select関数で複数条件(OR条件)で記載したいのですが、サンプルフォーマットをいただけませんかー??
こんにちは
一度ご自身で試してみると良いと思いますよ。
こんにちは。
やってみたのですが、もし文字列が空白が入っている場合はエラーを吐いてしまいます。
除外する方法をご教示いただけないでしょうか。
こんにちは
文字列が空白が入っている場合はエラー
具体的な内容が無いので推測になりますが、日付文字列中に不要な空白が入っているということでしょうか?
そうであれば、 上記の
DateTime.ParseExact(r("日付").toString,"MM/dd/yyyy",nothing)
を
DateTime.ParseExact(r("日付").toString.Trim,"MM/dd/yyyy",nothing)
(前後に余分な空白がある場合)
あるいは
DateTime.ParseExact(r("日付").toString.Replace(" ",""),"MM/dd/yyyy",nothing)
(空白を空文字列に置換)
のようにして空白を除去してあげると良いと思います。
ご回答ありがとうございます。
通常はMM/do/yyyyのような形ではいるのですが、
例外としてなにも入らない(空白)の場合があり、
そこでエラーを吐いてしまいます。