CSVファイルのいらなくなった列データを削除したい – プログラミング – Home

CSVファイルのいらなくなった列データ...
 
通知
すべてクリア

CSVファイルのいらなくなった列データを削除したい

固定ページ 1 / 2

mituhiko
 mituhiko
(@mituhiko)
ゲスト
結合: 21年前
投稿: 9
Topic starter  

はじめまして。
mituhikoといいます。
VC++は超初心者です。
今回は皆様のお力を頂戴致したく、初めて書き込み致しました。

CSVファイルのいらなくなった列データを列ごとにまとめて削除出来る
ツールをVC++のMFC AppWizardのダイアログベースで作っています。

ファイルを読み込み保存するまではなんとか出来たのですが、
肝心の列データをまとめて編集するという処理が出来ません。
理想としては編集ボタンを押すと
編集用ダイアログボックスが開き、「何番目の列を削除しますか?」
と表示し、列番号を入力したら、読み込んだCSVファイルの該当する
列データが削除されるというツールを作りたいと考えております。

もし皆様の中で似たようなプログラムをVC++で作ったことがある
方がいれば教えてください。
インターネットのどこかにあるのを知ってる方がいればURLを
教えてください。それではお願いします。

つたない文章ですいません。


引用解決済
トピックタグ
ひろぴー
 ひろぴー
(@ひろぴー)
ゲスト
結合: 22年前
投稿: 182
 

> 肝心の列データをまとめて編集するという処理が出来ません。
具体的にどういう処理をやっていてどこで詰まっているのか書くとレスがつきやすいと思いま
す。
CSVデータを内部でどのように保持しているかなども書くとよいかもしれません。


返信引用
mituhiko
 mituhiko
(@mituhiko)
ゲスト
結合: 21年前
投稿: 9
Topic starter  

ひろぴーさん
アドバイスありがとうございます。
具体的に説明したいと思います。

CSVファイル(10万行*30列)のファイルがあって、
そのファイルの1列目から16列までと27列目を抜き出した、
新たなCSVファイルをVC++でツールを使って作りたいと考えています。

VC++を使う理由は画面上で作業をしたいからです。

よろしくお願いします。


返信引用
mituhiko
 mituhiko
(@mituhiko)
ゲスト
結合: 21年前
投稿: 9
Topic starter  

CSVデータを内部でどのように保持しているか、は
超初心者なので私にはわかりません。
すいません。


返信引用
島
 島
(@島)
ゲスト
結合: 23年前
投稿: 238
 

>CSVデータを内部でどのように保持しているか、は
>超初心者なので私にはわかりません。

じゃあ、どうやってCSV形式のデーターをファイルから読み込んでいるんですか?
読み込んで保存できると書いていたのはどういうことなんですか?
ライブラリーかそういうCSV形式のデーターを扱うクラスかを使っているのなら
どういうものを使っているのか示して下さい
読める、書けるという事はどこかに保持しているということだと普通のプログラマーは
受け取ります
ひょっとして、一行単位に読めて、保存できるということでしょうか???


返信引用
mituhiko
 mituhiko
(@mituhiko)
ゲスト
結合: 21年前
投稿: 9
Topic starter  

>ひょっとして、一行単位に読めて、保存できるということでしょうか???
そういうことだと思います。
適切な表現が出来ず、申し訳ございません。
引き続き、アドバイスの方宜しくお願い致します。

ちなみにソースに目を通してもらえるとうれしいです。
void CMituhiko1Dlg::OnButton1()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください

CString buffer, openfile = ";
char crlf[] = \x0d\x0a;
CFileDialog myDLG(TRUE,txt,NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
TXTファイル(*.txt)|*.txt|全て(*.*)|*.*||);
if(myDLG.DoModal() == IDOK){
CStdioFile fin(myDLG.GetPathName(), CFile::modeRead);
while(fin.ReadString(buffer) != NULL){
openfile = openfile + buffer + crlf;
}
m_edit1.SetWindowText(openfile);
}

}
void CMituhiko1Dlg::OnButton3()
{
CString MyGetText;
// まだ一度も保存していない時は必ず名前を付けて保存
if(MyFilePath=="){
CFileDialog myDLG(FALSE, html, 新規ページ,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
HTMLファイル(*.html *htm)|*.html; *htm|全て(*.*)|*.*||);
if(myDLG.DoModal()==IDOK){
CStdioFile fout(myDLG.GetPathName
(),CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
m_edit1.GetWindowText(MyGetText);
fout.WriteString(MyGetText);
MyFilePath = myDLG.GetPathName();
}
// 保存した事がある時は上書き保存するかの確認
}else{
int i = MessageBox(MyFilePath + \nに上書きしますか?, 保存
確認, MB_YESNO );
// 上書き保存
if(i==IDYES){
CStdioFile fout(MyFilePath,
CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
m_edit1.GetWindowText(MyGetText);
fout.WriteString(MyGetText);
// 名前を付けて保存
}else{
CFileDialog myDLG(FALSE,html, 新規ページ,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
HTMLファイル(*.html *htm)|*.html; *htm|全て(*.*)
|*.*||);
if(myDLG.DoModal()==IDOK){
CStdioFile fout(myDLG.GetPathName
(),CFile::modeCreate
|CFile::modeWrite|CFile::typeBinary);
m_edit1.GetWindowText(MyGetText);
fout.WriteString(MyGetText);
MyFilePath = myDLG.GetPathName();
}

}

}
}


返信引用
mituhiko
 mituhiko
(@mituhiko)
ゲスト
結合: 21年前
投稿: 9
Topic starter  

島さん
レスありがとうございます。
引き続き、助言宜しくお願いします。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

> ちなみにソースに目を通してもらえるとうれしいです。

…これをどうせよと?

何らかのコメントを期待しているなら:
もっと綺麗(エレガント)に書き直しましょう


返信引用
mituhiko
 mituhiko
(@mituhiko)
ゲスト
結合: 21年前
投稿: 9
Topic starter  

タブに注意して書き直してみました。
これでも見難いのは百も承知ですが、
まだ若輩者でございますので、何卒宜しくお願いします。
void CMituhiko1Dlg::OnButton1()
{
CString buffer, openfile = ";
char crlf[] = \x0d\x0a;
CFileDialog myDLG(TRUE,txt,NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,TXT
ファイル(*.txt)|*.txt|全て(*.*)|*.*||);
if(myDLG.DoModal() == IDOK){
CStdioFile fin(myDLG.GetPathName(), CFile::modeRead);
while(fin.ReadString(buffer) != NULL){
openfile = openfile + buffer + crlf;
}
m_edit1.SetWindowText(openfile);
}
}
void CMituhiko1Dlg::OnButton3()
{
CString MyGetText;
if(MyFilePath=="){
CFileDialog myDLG(FALSE, html, 新規ページ,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, HTMLファイル(*.html *htm)|*.html; *htm|
全て(*.*)|*.*||);
if(myDLG.DoModal()==IDOK){
CStdioFile fout(myDLG.GetPathName
(),CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
m_edit1.GetWindowText(MyGetText);
fout.WriteString(MyGetText);
MyFilePath = myDLG.GetPathName();
}
}else{
int i = MessageBox(MyFilePath + \nに上書きしますか?, 保存確認,
MB_YESNO );
if(i==IDYES){
CStdioFile fout(MyFilePath,
CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);m_edit1.GetWindowText
(MyGetText);
fout.WriteString(MyGetText);
}else{
CFileDialog myDLG(FALSE,html, 新規ペー
ジ,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,HTMLファイル(*.html *htm)|*.html;
*htm|全て(*.*)|*.*||);
if(myDLG.DoModal()==IDOK){
CStdioFile fout(myDLG.GetPathName
(),CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
m_edit1.GetWindowText(MyGetText);
fout.WriteString(MyGetText);
MyFilePath = myDLG.GetPathName();
}
}
}
}


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

いや、見易いとか見難いとかいうことじゃなく、
同様の'言い回し'が何度も出てくるのがね。


返信引用
YOU
 YOU
(@YOU)
ゲスト
結合: 24年前
投稿: 41
 

MFCを使っていて、テキストをエディットに表示させていて、
それを取得して、保存しているようですので、
ファイル読み込み時に CStringArray に Add したらどうでしょうか?
何番目を削除っていう場合は RemoveAt を使うとか。
ただし、消した後、後ろが詰まってくるので注意が必要です。
(3番目を消すと消す前に4番目だったものが3番目になります。)

データをエディットに表示したり、ファイルに保存する際に
ちょっと手間がかかりますが・・・。

参考になるでしょうか?


返信引用
mituhiko
 mituhiko
(@mituhiko)
ゲスト
結合: 21年前
投稿: 9
Topic starter  

YOUさん
ありがとうございます。
早速やってみたいと思います。
ほんとにありがとうございます。


返信引用
ひろぴー
 ひろぴー
(@ひろぴー)
ゲスト
結合: 22年前
投稿: 182
 

CStringにファイル内容を一気に読み込んでいますので、まず配列に読み込むのをお勧めしま
す。
そうすれば何万行あろうが、抜き出す処理は1行単位。それを行数ループするだけです。

>CSVデータを内部でどのように保持しているか、は
>超初心者なので私にはわかりません。

このソースはmituhikoさんが書いたものではないのですか?


返信引用
ひろぴー
 ひろぴー
(@ひろぴー)
ゲスト
結合: 22年前
投稿: 182
 

ああ、すでに書き込みが(ToT)


返信引用
mituhiko
 mituhiko
(@mituhiko)
ゲスト
結合: 21年前
投稿: 9
Topic starter  

ひろぴーさん
レスありがとうございます。
察しのとおり、このソースはインターネットにあったものを
少し変えただけです。

一行単位で配列に読み込めばいいんですね!
わかりました。やってみます。
ありがとうございました。


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました