2013-07-04 2 views
0

Form1에는 2 개의 TextBoxes (성 및 이름)이 있습니다. "register"버튼을 누르면 TextWriter를 통해 파일에 기록됩니다. 모든 행에는 성 및 이름이 포함되어 있으므로 한 줄에 2 개의 필드가 있습니다.파일 내용 편집

Form2에서 매개 변수를 요청하여 편집하려고합니다. 예를 들어 Form2에는 하나의 TextBox가 있습니다. TextBox에 입력 한 성이 내 파일과 같은 경우 성 및 이름을 Form1의 올바른 TextBoxes에 표시하고 성 또는 이름을 편집 한 후 올바른 위치에 이전 행을 겹쳐 쓰려면 "등록 "버튼을 누릅니다. 사용자 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; 
} 

희망을 읽어주십시오. 나는 영어가 아니야. 미리 감사드립니다 !!

답변

0

그것은 여전히 ​​고전 텍스트 파일 편집 동작입니다 :

당신이 필요로하는 파일의 특정 라인을 검색하는 기능입니다; 특정 라인을 수정하는 또 다른 기능 그 중 하나는 the deleting code과 비슷합니다.

찾기 :

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(); 
} 

업데이트 : 내가 이전 "cognome"과 "을 표시해야합니다 코드를 형성 한 부턴 편집에 대해 확실하지 해하지 메신저를 시도해야

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"); 
+0

nome "을 입력하십시오.이 코드는 그렇게하지 않을 것입니다. form2에서 form1 텍스트 상자를 어떻게 관리 할 수 ​​있습니까? 예 : //form2.cpp myproject :: form1-> textBox1-> Text = obj -> cognome? thanks – gAeT

+0

나는 FileDialog에서했던 것과 같은 방식으로 추측한다. public pr을 공개한다. 양식을 닫은 후에 사용할 수있는 오페어. – Medinoc

+0

예를 들어 주시겠습니까? 정말 고마워요! – gAeT