TextFieldParserについて

このQ&Aのポイント
  • VC2008でTextFieldParserを使用する際にエラーが発生しています。
  • using namespace Microsoft::Win32;using namespace Microsoft::VisualBasic::FileIO;を追加しましたが、エラーが発生します。
  • Microsoft::VisualBasic::FileIO::TextFieldParserのコンストラクタの引数にエラーがあります。
回答を見る
  • ベストアンサー

TextFieldParserについて

VC2008でusing namespace Microsoft::Win32;using namespace Microsoft::VisualBasic::FileIO; を追加し、TextFieldParserの使い方を利用したいでしたが、エラーになりました。 String^ csvfilename; Microsoft::VisualBasic::FileIO::TextFieldParser parser = gcnew Microsoft::VisualBasic::FileIO::TextFieldParser(csvfilename,System::Text::Encoding::GetEncoding("Shift_JIS"));ではエラーがあります。 error C2664: 'Microsoft::VisualBasic::FileIO::TextFieldParser::TextFieldParser(System::String ^)' : 1 番目の引数を 'Microsoft::VisualBasic::FileIO::TextFieldParser ^' から 'System::String ^' に変換できません。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

> Microsoft::VisualBasic::FileIO::TextFieldParser parser = gcnew Microsoft::VisualBasic::FileIO::TextFieldParser(csvfilename,System::Text::Encoding::GetEncoding("Shift_JIS"));  左辺が参照型になってないのがエラーの原因。  Microsoft::VisualBasic::FileIO::TextFieldParser^ parser = …  とすればエラーは取れるけど……

yokodragon22
質問者

お礼

気づきませんでした。

その他の回答 (1)

回答No.1

VC2005ですが using namespace System; using namespace System::IO; using namespace System::Text; using namespace Microsoft::VisualBasic::FileIO; int main() { String^ csvfilename; TextFieldParser^ parser = gcnew TextFieldParser(csvfilename, Encoding::GetEncoding("Shift_JIS")); return 0; } でエラーが出ませんでした。

yokodragon22
質問者

補足

ここでは、CLRを利用しています。エラーが又でます。

関連するQ&A

  • TextFieldParserで"含むファイルを

    c sharp、Visual Studio 2015でコーディングしています。 TextFieldParserでtsvを読み込みたいのですが、ケースにより エラーが出て困っています。 using (TextFieldParser parser = new TextFieldParser(filePath, Encoding.GetEncoding("utf-8"))) { parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters("\t"); //タブ区切り while (!parser.EndOfData) { // 1行読み込み string[] row = parser.ReadFields(); ←ここでエラーになる } } tsvファイルにダブルクォーテーションが含まれているとエラーになってしまうようです。 回避する方法はないでしょうか? tsvは以下のように記述されています。 "aaa bbb" 1 2 3 4

  • vb2008です。ListViewついてです。

    初心者です。説明に分かりにくい所もあるかと思いますがよろしくお願いします。 csvファイルを用いてListViewで一覧の作成をしています。 Using textPatser As New Microsoft.VisualBasic.FileIo.TextPatser("C:¥~¥.csv",System.Text.Encoding.GetEncoding("UTF-8")) textPatser.TextFiledType=FileIo.FiledType.Delimited textPatser.HasfildsEnclosedInQuotes=True textPatser.SetDelimitedrs(",") ListView1.Items.Clear() While Not textPatser.EndOfData Dim fields As String() = textPatser.ReadFields() ListView1.Items.Add(New ListViewItem(fields)) End while End Using のコードにてListViewの一覧に入力しました。 一覧に国名の列があり0001,0002,0003....と入力しています。 別のcsvファイルに数字のコードと国名 国コード,国名 0001,日本 0002,アメリカ 0003,フランス と作りました。これを認識、0001の所は、日本と表示出来るようにしたいのですが 仕方を知りたいです。よろしくお願いします。

  • StreamReaderで読み込んだファイルの行数

    StreamReader^ reader = gcnew StreamReader( path, System::Text::Encoding::GetEncoding("shift-jis")); このreaderに20000行程度あるテキストファイルを読み込んだのですが、正確な行数を取得する方法はあるのでしょうか? どうぞ、ご教授よろしくお願い致します。

  • C#でIEの操作ができないページの操作方法

    C#でIEを操作しようとしているのですが、HTMLを取得する際にエラーが出てしまします。なぜでしょうか? yahooなどのサイトのHTMLは取得できるのですが、実際にhtmlを取得したいサイトは「型 'System.Net.WebException' のハンドルされていない例外が System.dll で発生しました 追加情報:接続が切断されました: 送信時に、予期しないエラーが発生しました。」とエラーがでます。 HTMLが取得できないサイトがあるのでしょうか? その時にどうすればHTMLを取得し、操作できるのかその方法を教えてください。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Encoding enc = Encoding.GetEncoding("Shift_JIS"); string url = "https://www.yahoo.co.jp/"; WebRequest req = WebRequest.Create(url); WebResponse res = req.GetResponse(); Stream st = res.GetResponseStream(); StreamReader sr = new StreamReader(st, enc); string html = sr.ReadToEnd(); sr.Close(); st.Close(); Console.WriteLine(html); } } }

  • CSVファイルの処理

    TextData = New Microsoft.VisualBasic.FileIO.TextFieldParser(FileName, System.Text.Encoding.Default) TextData.TextFieldType = FileIO.FieldType.Delimited TextData.SetDelimiters(",") TextData.TrimWhiteSpace = False While Not TextData.EndOfData Dim row() As String = TextData.ReadFields() For Each field In row       ・       ・       ・   Next End While こんな形でCSVファイルを読み出しているのですが、 カンマで区切られていても値の入っていないデータ(セル)は forループ内を通らず読み飛ばされ、次のデータの処理をしてしまいます。 ※例えば下記のようなCSVだったとすると、 野球 ,, サッカー , バスケ 処理は4回行ってほしいのに、2つ目の何もない箇所はとばされて 処理は3回しか行われません。 カンマで区切られていれば値が入っていなくとも処理を行うにはどうすればよいでしょうか?

  • C# ファイル名を指定してオープン

    StreamWriter swrite = new StreamWriter("C:\\19yamana.csv",false, System.Text.Encoding.GetEncoding("shift-jis")); のファイル名"C:\\19yamana.csv"の部分を変数にしたいのですがうまく出来ません。 やったこと: string fileName = "C:\\19yamana.csv"; StreamWriter swrite = new StreamWriter(fileName, false, System.Text.Encoding.GetEncoding("shift-jis"));

  • VC++メッセージの送受信について教えてください。

    VC++でソフトを作成しています。 初心者なのでわからないことだらけです。 どなたかご教授お願いします。 ■環境 Windows xp mode Visual Studio 2010 Professional VC++ フォームアプリケーション .net Framework4.0 ■相談内容 アプリ1のtextBoxに入力された文字列をアプリ2に送信して、アプリ2のtextBoxに表示させたいのですが、PostMessageを使用するとメッセージが送れません。 また、SendMessageを使用すると送れますが、共有メモリを使用すると文字列が途中で途切れてしまいます。 PostMessageと共有メモリの使用は指令なのではずせません。 理由は送信側のアプリがロックされるのを防ぐため、後に多数のアプリから送信した文字列を取得できるようにするためです。 下記にソースコードを記載しますので、どこが悪いのか、何が原因でそうなるのか、どうすれば正常に動作するようにできるのかを教えてください。 特に、ソースについてはどこをどのように直せば良いかを教えていただけるとありがたいです。 ~送信側ソース~ #pragma once #include<windows.h> #include<iostream> #include<fstream> #include<string> #include<msclr/marshal.h> #pragma comment(lib,"user32.lib") int s; using namespace std; using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; using namespace System::Runtime::InteropServices; using namespace msclr::interop; [DllImport("user32.dll") ] extern System::String^ FindWindow(String^ lpClassName, String^ lpWindowName); [DllImport("user32.dll")] extern System::String^ PostMessage(HWND hWnd, int Msg, int wParam, int lParam); public: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { System::String^ moji_textBox4; moji_textBox4=textBox4->Text; s=textBox4->Text->Length+1; COPYDATASTRUCT cd; HWND hWnd; char buffer[500]; sprintf_s(&buffer[0],5,"%s",moji_textBox4); cd.dwData=0; cd.cbData=s;//strlen(buffer)+1; cd.lpData=buffer; hWnd=::FindWindow(nullptr,L"アプリ2"); ::PostMessage((HWND)hWnd,WM_COPYDATA,0,(LPARAM)&cd); ~受信側ソース~ #pragma once #pragma comment(lib,"user32.lib") #include<ctype.h> #include<windows.h> #include<msclr/marshal.h> using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; using namespace System::Runtime::InteropServices; using namespace msclr::interop; public: virtual void WndProc(System::Windows::Forms::Message% msg) override { if(msg.Msg== WM_COPYDATA) { COPYDATASTRUCT *cd; cd=(COPYDATASTRUCT *)msg.LParam.ToInt32(); System::String^ str; str=gcnew System::String((char *)cd->lpData); pin_ptr<const wchar_t>pstr=PtrToStringChars(str); System::String^ ShareMemoryName1=L"Information"; HANDLE hmap; char *pmap; marshal_context^ context= gcnew marshal_context; LPCTSTR ShareMemoryName2 = context->marshal_as<LPCTSTR>(ShareMemoryName1); hmap=::CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,2048, (LPCTSTR)ShareMemoryName2); pmap=(char *)::MapViewOfFile(hmap,FILE_MAP_ALL_ACCESS,0,0,1024); System::String^ pstr1= gcnew System::String(pstr); ZeroMemory(pmap,2048); memcpy_s(pmap,2048,pstr,sizeof(pstr)); System::String^ str1; str1= gcnew System::String((char *)pmap); textBox6->Text=str1; UnmapViewOfFile(pmap); CloseHandle(hmap); } Form::WndProc(msg); }

  • 「識別子がクラス名でも名前空間名でもありません。」と出ます;

    このサイト様にある http://sorceryforce.com/manageddirectx/direct3d_cameraoperation.html Geometry::DegreeToRadian(); を自分のプログラムで使いたいのですが (※MSDNではこれです http://msdn.microsoft.com/ja-jp/library/ms889482.aspx) (マウスを乗せると ref class Microsoft::DirectX::Direct3D::Geometry sealed と出ます。) >error C2653: 'Geometry' : 識別子がクラス名でも名前空間名でもありません。 と出てしまいそのままでは動いてくれず、 >using namespace System; >using namespace System::Collections::Generic; >using namespace System::Diagnostics; >using namespace System::Drawing; >using namespace System::Text; >using namespace System::Windows::Forms; >using namespace Microsoft::DirectX; >using namespace Microsoft::DirectX::Direct3D; この部分をヘッダー領域に追記してみたのですが >error C2871: 'System' : この名前を指定された名前空間は存在しません。 他一式全部エラーが出てしまいます。 一応簡単な名前空間の勉強は済ませたつもりだったのですがさっぱり解りません; 私は何を間違えていて、 何を勘違いしていたり、勉強すべきなのか指摘して頂けると幸いです。 orz

  • StreamReaderで読み込んだテキストの行数

    テキストファイルを読み込んで行数文のクラスの配列を宣言したいと思っているのですが、 Wireless_unit Wireless_unit[32]; array<Wireless_unit_str^>^ Wireless_ID_str02 = gcnew array<Wireless_unit_str^>(32); 行数がわからないので、StreamReader^で宣言したreadで知る方法はありませんでしょうか? 下のような関数でファイルを読み込んでいます。 private: bool LoadCsvFile02( String^ path ) { StreamReader^ reader = gcnew StreamReader( path, System::Text::Encoding::GetEncoding("shift-jis")); ----(中略)------------------------------------------------

  • VB2010 DataGridVie CSV読込

    VB2010で出勤簿を作っています。 社員名簿と出勤簿がDataGridviewで作成され、社員名簿のDataは出勤簿に連動しています。 このDataGirdViewのDataを別のPCにある出勤簿でも使えるようにしたいので、素人考えでCSV形式で保存して、FDに移して別のPCに入れて使ことにしました。(CSV形式でなくても、移動できるのでしたら、そうしたいのですが、方法が分からないので、仕方なくCSV形式を選びました) いろいろ勉強しまして、保存方法は習得しましたが、CSVを読み込む際に、 [コントロールがデータバインドされているとき、DataGridView の行コレクションにプログラムで行を追加することはできません。] というエラーが出ました。 対処方法をご存知の方が居られましたら、ご教授ください。 コードを記載します。 Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click Dim parser As TextFieldParser = New TextFieldParser("savekyoto.csv", Encoding.GetEncoding("Shift_JIS")) parser.TextFieldType = FieldType.Delimited parser.SetDelimiters(",") ' 区切り文字はコンマ '出勤簿のDATAを初期化する Dim j As Integer For j = 0 To Me.DataGridView1.Rows.Count - 2 Me.DataSet11.出勤簿.Rows(j).Delete() Next While (Not parser.EndOfData) Dim row As String() = parser.ReadFields() ' 1行読み込み ' 読み込んだデータ(1行をDataGridViewに表示する) DataGridView1.Rows.Add(row) End While End Sub