旅行好きのおしりトラブル対策グッズ3選

http://sasuke.main.jp/cshlistcsv.html
上記のアドレスページのようにC#でCSVファイルをリストビュー(listView)で表示させることはできたのですが、私の作ったCSVファイルには、先頭にコメント行がついている物なのですが、そのコメント行まで表示されてしまいます。

コメント行を削除した状態でリストビューにッ表示することはできないでしょうか?

よろしくお願いします。

■CSVテストファイル構成
#名前,住所,郵便番号
さすけ,千葉県○○市,999-9999
太郎,埼玉県○○市,888-8888
二郎,東京都○○区,777-7777
■フォームロード
private void Form1_Load(object sender, EventArgs e)
{
//リストビュー初期化
listView1.View = View.Details;
listView1.Items.Clear();
listView1.Columns.Clear();

//項目1を追加
ColumnHeader ColumnH1 = new ColumnHeader();
ColumnH1.Text = "氏名"; //項目名
ColumnH1.Width = 100; //横幅
listView1.Columns.Add(ColumnH1); //項目の追加

//項目2を追加
ColumnHeader ColumnH2 = new ColumnHeader();
ColumnH2.Text = "住所";
ColumnH2.Width = 150;
listView1.Columns.Add(ColumnH2);

//項目3を追加
ColumnHeader ColumnH3 = new ColumnHeader();
ColumnH3.Text = "郵便番号";
ColumnH3.Width = 100;
listView1.Columns.Add(ColumnH3);

}
■参照ボタン
private void button1_Click(object sender, EventArgs e)
{
DialogResult result = openFileDialog1.ShowDialog();
if (result == DialogResult.OK)
{
// 選択されたファイル名を格納
textBox1.Text = openFileDialog1.FileName;
}
}
■ファイル読み込み実行
private void button2_Click(object sender, EventArgs e)
{

StreamReader srInf = new StreamReader(textBox1.Text,
Encoding.GetEncoding(932));

String filedata;
//1行ずつファイルを読み込む
while ((filedata = srInf.ReadLine()) != null)
{
//カンマで文字列分割
string[] csvdata = filedata.Split(',');

//リストビューの項目に追加
ListViewItem Listdata = new ListViewItem();
Listdata.Text = csvdata[0];
Listdata.SubItems.Add(csvdata[1]);
Listdata.SubItems.Add(csvdata[2]);
listView1.Items.Add(Listdata);
}
//ファイルをクローズ
srInf.Close();

}

A 回答 (2件)

当てずっぽうですけど。



>String filedata;
>//1行ずつファイルを読み込む

この間でダミーの読み込みを1回してもダメですか?
    • good
    • 0

ちゃんとコードを読んでないですけど



>//1行ずつファイルを読み込む
ここのコメントを信じて
ちゃんと一行ずつ読み込んでるなら
1ループ目を無視して2ループ目から使用すればいいのでは?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QC# ファイルを読み込みlistviewに展開

C#でtxtファイルを読み込み、listviewに展開したいのですが、txtファイルが
○○○,○○○
△△△,△△△
となっている場合、最初の一文字が消えて
○○,○○○
△△△,△△△
と表示されます。
コードは下記の通りです。
System.IO.StreamReader load = new System.IO.StreamReader(@".\test.txt", System.Text.Encoding.GetEncoding("shift_jis"));
load.Read();
String file;
while ((file = load.ReadLine()) != null)
{
string[] txtdate = file.Split(',');
itemx = new ListViewItem();
itemx.Text = txtdate[0];
itemx.SubItems.Add(txtdate[1]);
listView1.Items.Add(itemx);
}
load.Close();
何を直せば最初の一文字目も読み込まれるかご教授下さい。

C#でtxtファイルを読み込み、listviewに展開したいのですが、txtファイルが
○○○,○○○
△△△,△△△
となっている場合、最初の一文字が消えて
○○,○○○
△△△,△△△
と表示されます。
コードは下記の通りです。
System.IO.StreamReader load = new System.IO.StreamReader(@".\test.txt", System.Text.Encoding.GetEncoding("shift_jis"));
load.Read();
String file;
while ((file = load.ReadLine()) != null)
{
string[] txtdate = file.Split(','...続きを読む

Aベストアンサー

>load.Read();
この一行削除。

QC# listviewでサブアイテムを順番に抽出

C#のlistviewで例えば中身が下記の様になっているとします。
AAA,AAA,1,AAA
BBB,BBB,2,BBB
CCC,CCC,6,CCC
DDD,DDD,3,DDD

SubItems[2]の数字を予め設定した引数str1,str2,str3,str4にlistviewの上から順番に当てはめたいです。
str1=1
str2=2
str3=6
str4=3
こんな感じにしたいです。
上手く説明できているか不安ですが、ご教授頂ければありがたいです。

Aベストアンサー

str1=listview1.Items[0].SubItems.item[2];
str2=listview1.Items[1].SubItems.item[2];
str3=listview1.Items[2].SubItems.item[2];
str4=listview1.Items[3].SubItems.item[2];
ってところでしょうか?

","区切りでそれぞれのSubitemに入っている場合…ですけどね。
# SubItems[2]って言っているくらいですから、そこらヘンは理解されていると思いますが。

QListBoxのデータを高速でファイルに書き込む方法 VB.NET

ListBoxに大量のデータを登録してありそれをファイルに保存する場合
Dim data As String
For i As Integer = 0 To ListBox1.Items.Count - 1
data = data & ListBox1.Items(i) & VbCrLf
Next

という方法で変数に読み込むとデータが大量にある場合
非常に遅く、OutOfMemoryのエラーが出てしまったりするのですが、
このような場合により適切な方法がありましたらご教授頂けないでしょうか。

宜しくお願いいたします。

Aベストアンサー

System.IOとSystem.Textをインポートしてください。

Dim enc As Encoding = Encoding.GetEncoding("Shift_JIS")
Dim Fname as String = ファイル名を入れてください
Using writer As StreamWriter = New StreamWriter(csvName, False, enc)
For i As Integer = 0 To ListBox1.Items.Count - 1
writer.writeline(ListBox1.Items(i))
Next
End Using

QC#でCSVファイルを逐一更新したい

C#のプログラムで
データをCSVファイルに蓄積するプログラムを作っています。

やり方としては最初にCSVファイルを指定し
ボタンを押すたびに、データを追加するように作りました。
以下抜粋

//CSVファイル指定
csvfile = new System.IO.StreamWriter(csvPath, true, encording);



//データの書き込み
csvfile.Write(data);
csvfile.Write(",");



//CSVファイルクローズ
csvfile.Close();

このプログラムを動作させた所
「csvfile.Close();」の時点で、実際にcsvにデータが書き込まれました。
データの書き込みのたびにCSVファイルが更新されるのが理想なのですが、
その方法としては逐一クローズするしか方法はないのでしょうか?

何らかの方法で逐一更新出来たり、
もしくは異なるCSVへの書き込み方法があれば、教えていただけないでしょうか?

Aベストアンサー

http://msdn.microsoft.com/ja-jp/library/system.io.streamwriter.flush%28v=vs.80%29.aspx

できるのはこれくらい。
StreamWriter調べればわかったことだと思うけど。

QListView 項目の選択/選択解除について

 ListViewに表示する情報が1件しかないとき、その情報が常に選択された状態なので、
困っています。

 1件しかなくても、選択したり、選択を解除したりすることは出来ないのでしょうか?

 または、ListViewでは出来ないけど、他のコントロールなら出来ると言う情報があり
ましたらぜひ教えてください。

 よろしくお願いします。

Aベストアンサー

失礼しました
× HitItem
○ HitTest
でした。

Private Sub Form_Load()
  Dim i    As Integer
  
  With Me.ListView1
    .View = lvwList       '//表示形式:一覧
    .HideSelection = False   '//リストビューがフォーカスを失っても、選択状態を保持する
    .MultiSelect = True     '//複数選択可能
    
    'ダミーデータの登録
    .ColumnHeaders.Add , , "ヘッダ"
    For i = 1 To 10
      Me.ListView1.ListItems.Add , , "Dmy Data" & i
    Next i
 
  End With
End Sub

Private Sub ListView1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
  Dim itmX  As ListItem
  
  With Me.ListView1
    'マウス位置のアイテムを取得
    Set itmX = .HitTest(x, y)
    '取得できたなら未処理
    If Not (itmX Is Nothing) Then
      GoTo PGMEND
    End If
    
    '現在選択中のアイテムを取得
    Set itmX = .SelectedItem
    '取得できなかったなら未処理
    If (itmX Is Nothing) Then
      GoTo PGMEND
    End If
    
    '選択解除
    Set .SelectedItem = Nothing
    itmX.Selected = False
  End With
  
PGMEND:
  Set itmX = Nothing
End Sub

失礼しました
× HitItem
○ HitTest
でした。

Private Sub Form_Load()
  Dim i    As Integer
  
  With Me.ListView1
    .View = lvwList       '//表示形式:一覧
    .HideSelection = False   '//リストビューがフォーカスを失っても、選択状態を保持する
    .MultiSelect = True     '//複数選択可能
    
    'ダミーデータの登録
    .ColumnHeaders.Add , , "ヘッダ"
    For i = 1 To 10
      Me.ListView1.ListItems.A...続きを読む

QC#にて別クラスの関数を使いたい

C#にて、別クラスの関数を使用する方法を教えてほしいです。

下記のような、構造体を受け取るメソッドを作りました。

*****************************
private struct MyPoint
{
public int x;
public int y;
}

private void proc1(MyPoint pt)
{
MessageBox.Show("座標:" ; pt.x + "," + pt.y + "実行結果");
}

private void button1_Click(object sender ,System.EventArgs e)
{

MyPoint pt;
pt.x = 10;
pt.y = 20;
proc(pt);
}
*****************************

別のフォームのクラスから、proc1を呼び出したいのですが、やり方がわかりません。
どうか、教えてください。

Aベストアンサー

同じ定義をしたとしても別の名前空間に書いた構造体は同一とはみなされません。

呼び出し先クラスでの構造体を private では無く、public で宣言して下さい。

呼び出し元では、

MyClass.MyPoint pt;

のようにして実体を作ります。

QC# get set

C#でのget setの意味、使い方を教えてください
初心者のため、調べても意味が良く分からず、またどういった場面で利用されるかも分かりません。
有識者の方、よろしくお願い致します。

Aベストアンサー

C#のプロパティという機能はご存知でしょうか?
get、setは、プロパティを実装する際に利用するものです。
getは値の取得、setは値の設定をするものです。

get、setの意味というよりも、プロパティの意味を知ることが大切かと思います。

○意味

プロパティとは、クラスのメンバ変数であるかのようにアクセス可能でありながら、
処理の内容を自分で記述できる機能、、、です(@ITより)。

クラスのメンバ変数をpublicにして公開した場合、どうなるでしょう?
外部から好きなようにメンバ変数の値を変更することができてしまい、
オブジェクト指向という考え方から外れてしまいますよね。

例えばエレベータは、行きたい階のボタンを押せば勝手に運んでくれます。
利用する人は、「ボタンを押す」ということだけ知っていればよく、
ボタンが押された後にどのような仕組みで動くのかを知る必要はありません。

メンバ変数をpublicにして公開するというのは、エレベータの内部構造を公開し、
ボタンではなく、内部構造を直接いじって欲しいというのに似ています。
これだとエレベータが壊れてしまったり、正しく動かなかったりするのは明白です。

前置きが長くなりました^^;
このように、内部実装は隠蔽化すべきというのは分かっていただけたでしょうか。
C#のプロパティは、メンバ変数を隠蔽化する場合に利用する機能なのです。

○使い方

あるクラスに次のようなメンバ変数があったとします。

int code;

この変数は、0~1000までの整数が入るようにしたいという要件があったとします。

public int code;

としてしまうと、外部からcode変数を好き勝手いじられてしまうので、
0~1000までの整数が入るようにしたいという要件は満たせませんし、
そもそも、上記のようにメンバ変数を公開することは推奨されません。

この時、メンバ変数をプロパティとして隠蔽化します。

private int code;

public int Code
{
get
{
return this.code;
}
set
{
if(0 <= value && value <= 1000)
this.code = value;
}
}
※スペースが上手くいれられず申し訳ありません。

#1の方の回答にある

> 代入しようとする値が正しいかどうかチェックする

は、上記ようにsetの処理でチェックを行うことが出来るということです。

利用の仕方は、TextBoxなどのコントロールを使ったことであれば分かりますよね?

長くなってしまいまして、申し訳ありません。
疑問が解消されないようでしたら、その旨をおっしゃってくださいね。

C#のプロパティという機能はご存知でしょうか?
get、setは、プロパティを実装する際に利用するものです。
getは値の取得、setは値の設定をするものです。

get、setの意味というよりも、プロパティの意味を知ることが大切かと思います。

○意味

プロパティとは、クラスのメンバ変数であるかのようにアクセス可能でありながら、
処理の内容を自分で記述できる機能、、、です(@ITより)。

クラスのメンバ変数をpublicにして公開した場合、どうなるでしょう?
外部から好きなようにメンバ変数の値を...続きを読む

QC#でプログラミング。 csvファイルへの書き込みについて

フォームに貼ったtextboxやlistboxの内容をボタンを押すことで、
csvファイルで書き出したいと考えています。

C#は初心者なので調べてみてもよくわからずにいます。

どのようにしたらよいのでしょうか??
また、いいサイトなどをご存知の方がいましたら教えてください。

Aベストアンサー

http://dobon.net/vb/dotnet/file/writecsvfile.html
とりあえず、見つかりました。

csvは数値のみなどの表を保存するのには向いていますが、フォームで入力された値などを保存するには不向きで、app.configなどを使う方がよろしいかと…あくまでも私見ですが。

Qリストビューの項目の内容を変更する方法は?

お世話になります。

VS2005を使用しています。
VB.NETのリストビューで一覧を作ったのですが、その中の項目の内容をプログラム内から変更することは出来ないのでしょうか?
色々検索してみたのですが見つかりませんでした。

現在、リストビューには4つの項目があり、100行くらい有ります。
(1つ目の項目にはチェックボックス付き)
その中の、項目の内容を変更したいのです。

やはり、以下のようにしなければいけないのでしょうか。
1)一旦対象行の内容を保存
2)対象行を削除
3)保存先で内容変更
4)リストビューに再追加

よろしくご享受下さい。

Aベストアンサー

ListView1.Items(1).SubItems(2).Text = "ABC"
とかでは?

QListViewコントロールでサムネイル画像を一覧表示するには?

VB初心者です。
.NET TIPSの中に「ListViewコントロールでサムネイル画像を一覧表示するには?」というものがありました
今回、それを利用してサムネイル一覧の表示をしようとして行き詰りました。

作りたいのは以下のものです
○決まったサイズの画像(bitmap)を表示し、その下にファイル名(フルパスでは無い)を表示し、更にその下に元の画像のサイズを表示するようなものを作成したいのですが、作成可能でしょうか?
また、作成可能な場合、どういった方法で作成したら良いか教えて下さい。
行き詰ったのは、第一段階の、サムネイル画像のしたのファイル名の所です。
よく分からずに
ListView1.Items.Add(bmpFiles(i), i)の所を
Dim bmpFileName As String = _
Path.GetFileNameWithoutExtension(bmpFiles(i))
ListView1.Items.Add(bmpFileName)
bmpFileName(ファイル名のみ)に変更したら、ファイル名は表示されるのですが、画像が表示されませんでした。

次に両方書いたのですが画像の下にフルパスその横にファイル名が表示されます。
Dim bmpFileName As String = _
Path.GetFileNameWithoutExtension(bmpFiles(i))
ListView1.Items.Add(bmpFiles(i), i)
ListView1.Items.Add(bmpFileName)
色々調べてみたのですが、思ったような記述が無かったのでここで質問させて頂きました。
拙い質問なので分かり難いかと思いますがアドバイスをよろしくお願いいたします。

VB初心者です。
.NET TIPSの中に「ListViewコントロールでサムネイル画像を一覧表示するには?」というものがありました
今回、それを利用してサムネイル一覧の表示をしようとして行き詰りました。

作りたいのは以下のものです
○決まったサイズの画像(bitmap)を表示し、その下にファイル名(フルパスでは無い)を表示し、更にその下に元の画像のサイズを表示するようなものを作成したいのですが、作成可能でしょうか?
また、作成可能な場合、どういった方法で作成したら良いか教えて下さい。
行き詰っ...続きを読む

Aベストアンサー

n-junです。

画像を表示して、そこにファイル名と画像の(幅と高さ)を表示でしょうか?

ListView1.Items.Add(System.IO.Path.GetFileName(jpgFiles(i)) & vbLf & "幅:" & original.Width _
& " 高さ:" & original.Height, i)

こんな感じなら出来ましたけど、どうでしょう?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報