1

Windows フォーム プログラムを作成しています。フォームでは、テキスト ボックスを使用してデータを挿入し、それらをファイルに書き込みます。登録ボタンを押すと、回線などを登録します。例:

test1|test2|test3...

test4|test5|test6...

別のフォームでは、テキスト ボックスに単語を入力します。この単語がファイルにある場合は、その行を削除します。例: 単語は test5 なので、そこにあるすべての行を削除します。私が持っているでしょう:

test1|test2|test3...

Medinoc ユーザーに感謝します。

書きます

ref class MyClass
{
public:
    String^ cognome;
    String^ nome;
    int voto_diploma;
};

//...

List<MyClass^>^ primo = gcnew List<MyClass^>();

//...

MyClass^ myObj = gcnew MyClass();
myObj->cognome = textBox1->Text;
myObj->nome = textBox2->Text;
myObj->voto_diploma = Convert::ToInt32(textBox35->Text);
primo->Add(myObj);

//...

TextWriter ^tw = gcnew StreamWriter(L"primoAnno.txt", true);
for each(MyClass^ obj in primo)
{
//You can use any character or string as separator,
//as long as it's not supposed to appear in the strings.
//Here, I used pipes.
tw->Write(obj->cognome);
tw->Write(L"|");
tw->Write(obj->nome);
tw->Write(L"|");
tw->WriteLine(obj->voto_diploma);
}
tw->Close();

読んだ

MyClass^ ParseMyClass(String^ line)
{
array<String^>^ splitString = line->Split(L'|');
MyClass^ myObj = gcnew MyClass();
myObj->cognome = splitString[0];
myObj->nome = splitString[1];
myObj->voto_diploma = Convert::ToInt32(splitString[2]);
return myObj;
}

消去

TextWriter^ tw = gcnew StreamWriter(L"primoAnno2.txt", true);
TextReader^ tr = gcnew StreamReader(L"primoAnno.txt");
String^ line;
while((line=tr->ReadLine()) != nullptr)
{
MyClass^ obj = ParseMyClass(line);
if(obj->cognome != L"cat")
    tw->WriteLine(line);
}
tr->Close();
tw->Close();
File::Delete(L"primoAnno.txt");
File::Move(L"primoAnno2.txt", L"primoAnno.txt");

しかし、削除部分は正しく機能しません。それを修正するのを手伝ってもらえますか?

4

1 に答える 1

0

私が知る限り、削除する機能は「cognome」のみをチェックするため、一致させようとしている単語が実際に「nome」である場合、一致しません。次のように削除関数を変更してみてください。

if(obj->cognome != L"cat" && obj->nome != L"cat" )
    tw->WriteLine(line);
}
于 2013-07-04T15:45:02.013 に答える