0

Form1 には 2 つの TextBoxes (姓と名) があります。「登録」ボタンを押すと、TextWriter を介してファイルに書き込みます。すべての行には名字と名前が含まれているため、1 行に 2 つのフィールドがあります。

Form2 では、パラメーターを要求して編集したいと考えています。たとえば、Form2 には TextBox が 1 つあります。TextBoxに入力した姓がファイルの姓と等しい場合、Form1の正しいTextBoxに姓と名前を表示し、姓または名前を編集した後、「登録」を押して正しい場所で前の行を上書きしたい" ボタン。

ユーザー Medinoc のおかげで、次のようにファイルを書きます。

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

//...

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

//...

MyClass^ myObj = gcnew MyClass();
myObj->cognome = textBox1->Text;
myObj->nome = textBox2->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->Close();

読んだ

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

私が十分に明確だったことを願っています。私はイギリス人ではありません。前もって感謝します!!

4

1 に答える 1

0

これは、従来のテキスト ファイル編集動作のままです。

必要なのは、ファイル内の特定の行を検索する関数です。特定の行を変更する別の関数。それは削除コードに似ています。

探す:

MyClass^ FindMyClass(String^ surnameToFind)
{
    MyClass^ found = nullptr;
    TextReader^ tr = gcnew StreamReader(L"primoAnno.txt");
    String^ line;
    while(found == nullptr && (line=tr->ReadLine()) != nullptr)
    {
        MyClass^ obj = ParseMyClass(line);
        if(obj->cognome == surnameToFind)
            found = surnameToFind;
    }
    tr->Close();
}

アップデート:

MyClass^ objToUpdate = gcnew MyClass;
objToUpdate->cognome = textBox1->Text;
objToUpdate->nome = textBox2->Text;

TextWriter^ tw = gcnew StreamWriter(L"primoAnno2.txt", true);
TextReader^ tr = gcnew StreamReader(L"primoAnno.txt");
String^ line;
bool updated = false;
while((line=tr->ReadLine()) != nullptr)
{
    MyClass^ obj = ParseMyClass(line);
    if(obj->cognome == objToUpdate->cognome)
    {
        line = objToUpdate->cognome + L"|" + objToUpdate->nome;
        updated = true;
    }
    tw->WriteLine(line);
}
//If the surname was not in the file at all, add it.
if(!updated)
{
    line = objToUpdate->cognome + L"|" + objToUpdate->nome;
    tw->WriteLine(line);
}
tr->Close();
tw->Close();
File::Delete(L"primoAnno.txt");
File::Move(L"primoAnno2.txt", L"primoAnno.txt");
于 2013-07-05T07:46:40.833 に答える