🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSV

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

C#

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

Q&A

解決済

1回答

2157閲覧

csvから取得した日付データをyyMMddに変換する

AEGIL

総合スコア7

CSV

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

C#

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

0グッド

0クリップ

投稿2020/12/21 05:47

編集2020/12/22 00:02

CSVファイル内のyyyy-MM-dd-hh-mm-ssで入っているデータのフォーマットをyyMMddに変えたいのですがどうしたら変換を行えますでしょうか?
DateTime.ParseExact(c.date,"yyMMdd",out result),というものがあったので試してみたのですがいまいちやり方がわかりませんでした。
"yyyy-MM-dd-hh-mm-ss" という文字列がresult内に格納されるのですが、
そのデータを"201221" という形の文字列に変換したいということになります。
csvから取得したデータとoracleから取得したデータをリザルトにいれております

説明不足申し訳ありません

c#

1//csvデータ 2csvDT 3{ 4public string name {get;set;} 5public string date{get;set;} 6public string code{get;set;} 7 8} 9//オラクルデータ 10oracleDT 11{ 12public string name {get;set;} 13public string date{get;set;} 14public string code{get;set;} 15 16} 17//結果用 18result 19{ 20 public string 名前 {get;set;} 21 public string 投入日{get;set;} 22}

c#

1var join = from c in csvDT 2 join o in oracleDT 3 on c.code equals o.code 4 5select new result 6{ 7date= c.date, 8name= c.name 9 10}; 11

試そうとしたサンプル(linqで使う方法がわからなかった)

var join = from c in csvDT join o in oracleDT on c.code equals o.code select new result { date = DateTime.ParseExact(c.name, "ddMMyyyy", CultureInfo.InvariantCulture),

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

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

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

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

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

gentaro

2020/12/21 05:52

質問内容と貼られているコードの関連が不明。 「DateTime.intparse(),で試したのですが」と書かれているがそんなメソッドはない。
退会済みユーザー

退会済みユーザー

2020/12/21 05:54

定義不明の変数が多々ありますが、回答者の想像力に期待しないで、ちゃんと書いてください。一番上のブロックのコードは何? csvDT とは何? oracleDT とは何? 「データのフォーマットをyyMMddに変えたい」というのはどういうこと?
Zuishin

2020/12/21 06:08

単純にハイフンで Split して前から三つ連結すればいいのでは?
Zuishin

2020/12/22 00:19 編集

LINQ で難しければループを使えばいいだけ。三つくらいならループなしでもできる。それも難しいならあなたには何も作れません。 コピペできるコードを探して切り貼りするようなことしかするつもりがないなら、早めにやめましょう。
dodox86

2020/12/22 00:51

>@質問者さん LINQにこだわっておられるようですが、それ以前の話では。そもそも"yyyy-MM-dd-hh-mm-ss"な日時文字列を"yyMMdd"に、例えば"2020-12-22-12-34-56"を西暦下2桁で、"201222"に変換するコードを書けるかどうか、というところでしょう。Splitでもできますし、ReplaceとSubstringでもできるはずです。混乱しているのであれば、LINQと分けて考えてください。
AEGIL

2020/12/22 02:13

>@dodox86さん すみません完全にてんぱっていました。splitしか方法ないと思いその記事しか見てなかったのですが、確かにreplaceとsubstring のこと完全に頭の中から外れていました。分けて考えたら無事出来ました。ありがとうございます。
AEGIL

2020/12/22 02:15

@zuishinさん その通りですね。
退会済みユーザー

退会済みユーザー

2020/12/22 02:18 編集

回答がついた後は質問欄を書き換えないでください。回答と質問の辻褄が合わなくなって訳がわからなくなりますので。質問欄を編集する場合は、追記する形でお願いします。 質問のコメント欄は「質問への追記・修正の依頼」をする場所ですので、その限りではありませんが。
AEGIL

2020/12/22 02:18

@SurferOnWwwさん かしこまりました。編集ではなく今後追記致します。事前に把握しておらず申し訳ありません。
退会済みユーザー

退会済みユーザー

2020/12/22 02:20

結局何をしたいのか分からなくなってきました。何がこのスレッドで解決したい課題なのか整理して書いてください。それに対してレスしますので。
guest

回答1

0

ベストアンサー

CSVファイル内のyyyy-MM-dd-hh-mm-ssで入っているデータのフォーマットをyyMMddに変えたいのですがどうしたら変換を行えますでしょうか?

依然として何がしたいのかはっきりしませんが・・・

例えば「result.投入日」プロパティで "2020-12-21-15-10-30" という文字列が得られるので、それを 201221" という文字列に変換したいということですか?

であれば、ハイフン '-' で Split して string[] 型のオブジェクトを取得し、それを目的に合うよう加工して連結してはいかがですか?

それがダメならどこがダメなのか書いてください。

投稿2020/12/21 06:19

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

AEGIL

2020/12/21 06:42

説明力が足りず申し訳ありません。その解釈でお間違えありません。質問改めて編集させていただきます。
退会済みユーザー

退会済みユーザー

2020/12/21 07:52

「ハイフン '-' で Split して string[] 型のオブジェクトを取得し、それを目的に合うよう加工して連結」はコードに書けますよね? 分からないことがあれば質問してください。
AEGIL

2020/12/21 16:03

すみません。splitの記事何件か見たのですが上記のコードへのデータを割り当てるすべがわかりませんでしたのでご教授願いたいです。
退会済みユーザー

退会済みユーザー

2020/12/22 00:02

"yyyy-MM-dd-hh-mm-ss" という形の文字列を引数に受けて、回答に書いた Split メソッド等を使って "yyMMdd" という形の文字列に変換して返すメソッドは書けますか?
AEGIL

2020/12/22 00:06

https://www.sejuku.net/blog/44242 この記事を見ながらやろうとしていたのですが、linq使用時にどうするべきなのかが全くわかっておりません。
退会済みユーザー

退会済みユーザー

2020/12/22 00:20 編集

質問のコードが動くとは思えませんが、そこはちょっと置いといて・・・ 例えば、上のコメントに書いたメソッドを、 public string MyMethod(string input) { // ・・・中略・・・ } というように作ったとして、質問の Linq のコードの最後の方で、 select new result { date= MyMethod(c.date), name= c.name }; としてみてはいかがですか?
AEGIL

2020/12/22 00:57 編集

誤打
AEGIL

2020/12/22 00:59 編集

ご返答ありがとうございます。 splitで表す場合も先に区切る箇所だけ指定しておいて値に関してはc.dateに入ってしまっているのでsplitした箱に投入するイメージなのでしょうか。 基礎からやり直そうかと思います。
退会済みユーザー

退会済みユーザー

2020/12/22 00:53

上の私のコメント、 > "yyyy-MM-dd-hh-mm-ss" という形の文字列を引数に受けて、回答に書いた Split メソッド等を使って "yyMMdd" という形の文字列に変換して返すメソッドは書けますか? に対する答えは No ということですか? では、出来るかぎり自分で書いて、その先何が分かれば解決できるかを教えて下さい。 ところで、 > 上のコードだと確実に動かないです。 というのは質問の Linq のコードのことだと理解してますが、そうだとすると、この Q&A で解決できることではありませんが、そこはどうするのですか?
AEGIL

2020/12/22 00:57

誤解を生んでしまってすみません > 上のコードだと確実に動かないです。 こちらに関してはこの後に分を続けようとしていたのですが誤打で送信してしまい削除依頼をだしているところになります。先に訂正いたします。
退会済みユーザー

退会済みユーザー

2020/12/22 02:10

結局何をしたいのか分からなくなってきました。何がこのスレッドで解決したい課題なのか整理して書いてください。それに対してレスしますので。
退会済みユーザー

退会済みユーザー

2020/12/22 02:14 編集

回答がついた後は質問欄を書き換えないでください。回答と質問の辻褄が合わなくなって訳がわからなくなりますので。質問欄を編集する場合は、追記する形でお願いします。
AEGIL

2020/12/22 02:24

>結局何をしたいのか分からなくなってきました。何がこのスレッドで解決したい課題なのか整理して書いてください。それに対してレスしますので。 先ほどまで混乱していたのですが、一気に全部をやろうとせず、分解したら問題なく課題達成できました。ご返答いただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問