Member 12897180 Ответов: 2

Как я могу изменить конкретный объект из конкретной строки в конкретном txt файле


У меня есть код автоматизации больницы,и в разделе удаления мне нужно изменить конкретную информацию о пациенте, не удаляя всю строку.

Что я уже пробовал:

я пытался :
var file = new List<string>(System.IO.File.ReadAllLines("Hasta.txt")); //Aranan Tc'ye göre diziler kullanarak Hasta dosya'sında bilgileri sil file.RemoveAt(i); File.WriteAllLines("Hasta.txt", file.ToArray());

Richard MacCutchan

В чем проблема?
Кроме того, почему вы используете текстовые файлы для такого проекта? Какая-то база данных имела бы гораздо больше смысла.

2 Ответов

Рейтинг:
13

OriginalGriff

В текстовых файлах нет "строк" - в них есть" символы Терминатора строк", которые при некоторых обстоятельствах позволяют рассматривать их как отдельные строки. Но это не значит, что" строки есть строки "- Если ваши новые данные на один символ больше или меньше старых данных (а так оно и будет), то вы не можете просто" переписать строку", так как для этого вам нужно вставить или удалить символ из всей остальной части файла.

Текстовые файлы здесь не являются хорошим выбором - единственный безопасный способ их обновления - это прочитать файл до записи, которую вы хотите изменить, записать ее в новый файл по ходу работы, затем записать новую информацию, пропустить старую строку и прочитать остальную часть файла, записав ее в новый файл. Когда вы закончите, закройте оба файла, удалите оригинал и переименуйте новый.

Другая альтернатива состоит в том, чтобы прочитать весь текст - как вы есть - затем изменить свою запись и записать ее обратно в виде нового файла. Затем удалите старое и переименуйте новое.

Но... больницы никогда не являются однопользовательскими средами, поэтому это чревато опасностью и высоким риском потери данных в результате. Все, что нужно, - это два пользователя, пытающиеся изменить разные записи одновременно, и кто-то потеряет то, что они ввели!

Вместо этого подумайте об использовании базы данных-Sql Server или MySql-это хороший выбор - и пусть она сама обрабатывает файлы, а вы просто говорите ей, что вставлять, что обновлять и так далее - это также будет намного, намного быстрее, когда вы начнете запускать код!


Member 12897180

на самом деле я использовал альтернативный способ, который вы сказали, и он сработал, но проблема, с которой я столкнулся, заключается в том, что команда remove удаляет всю информацию о пациенте, а не только идентификационный номер, имя или фамилию... как я могу удалить объект, который просто хочу изменить?
спасибо за помощь :)

Member 12897180

если (secim == 2)
{
Приставка.WriteLine ("Aranan Hastaya ait TcKimlik Noyu Giriniz");
arananTc = консоль.Линия чтения();
Приставка.метод WriteLine("_________________________________________________________");
Приставка.WriteLine("TC KIMLIK\tADI\tSOYADI\tYAŞ\tTELEFON\tKayit NO\tCINSIYET");
//Hasta dosyasındakı bilgileri oku
string [] satirlar = файл.ReadAllLines("Hasta.txt");

//хаста dosyasındaki lineler Текер Текер Оку ва ayır
for (int i = 0; i & lt; satirlar.Длина; i++)
{
string[] satirdakiHastaBilgileri = satirlar[i]. Split(';');


if (satirdakiHastaBilgileri[0] == arananTc)
{

Приставка.Писать(satirdakiHastaBilgileri[0] + "\Т" + satirdakiHastaBilgileri[1] + "\т" + satirdakiHastaBilgileri[2] + "\т" + satirdakiHastaBilgileri[3] + "\т" + satirdakiHastaBilgileri[4] + "\т" + satirdakiHastaBilgileri[5] + "\т" + satirdakiHastaBilgileri[6]);

файл var = новый список<строка> По(системы.ИО.Файл.ReadAllLines("Hasta.txt"));
//Aranan Tc'ye göre diziler kullanarak Hasta dosya'sında bilgileri sil
файл.RemoveAt(i);
Файл.WriteAllLines("Hasta.txt", файл.Метод toArray());


// yeni dosya oluştur
StreamWriter yazici = файл.AppendText("Hasta.txt");

//ilk önce bilgileri yaz ondan sonra koşula geç

Приставка.метод WriteLine( );
// Oluşturulan dosya'nın içine istediğin bilgileri oluştur
Приставка.Пишите("Хастанин Ени ТК кимлик Носуну гириниз:");
hastaTc = консоль.Линия чтения();
Приставка.Писать("Hastanin giriniz Адини Ени :");
хастаади = консоль.Линия чтения();
Приставка.Писать("Hastanin Soyadini giriniz Ени :");
хастасояди = консоль.Линия чтения();
Приставка.Напишите ("Hastanin yeni Yaşini giriniz:");
hastaDogumTarih = конвертировать.ToInt32 (Консоль.Линия чтения());
Приставка.Напишите ("Hastanin yeni Telefonunu giriniz:");
hastaTel = консоль.Линия чтения();
Приставка.Напишите("Хастанин Ени Кайдин нет ");
хастакайитно = конвертировать.Тохар(Консоль.Линия чтения());
Приставка.Напишите ("Hastanin yeni Cinsiyetini giriniz:");
hastaCinsiyet = преобразовать.Тохар(Консоль.Линия чтения());

hastaBilgileri = hastaTc + "; " + hastaAdi +"; " + hastaSoyadi +"; " + hastaDogumTarih +"; " + hastaTel +"; " + hastaKayitNo +"; " + hastaCinsiyet;

язичи.WriteLine(hastaBilgileri);
Приставка.метод WriteLine();
язичи.Закрывать();
Приставка.WriteLine ("Кайит Башарийла экленди. :) ");
Приставка.Линия чтения();

}
Приставка.Линия чтения();

}
}

OriginalGriff

Нет, это не так.
Вы добавляете "обновленную" информацию в конец файла, не изменяя существующие данные.
Вы читаете файл в "файл", удаляете строку, затем добавляете новую строку в конце, прежде чем записать все обратно.
Поэтому используйте отладчик и посмотрите, что находится в hastaBilgileri непосредственно перед тем, как написать его.

Member 12897180

Ладно я попробую

Member 12897180

сэр, у меня все еще есть та же проблема, что я не мог дотянуться только до одного объекта из всей строки, я не буду переписывать всю строку только для обновления одной информации ... я разделил их здесь :
string[] satirdakiHastaBilgileri = satirlar[i]. Split(';');

и напишите их здесь :

hastaBilgileri = hastaTc + "; " + hastaAdi +"; " + hastaSoyadi +"; " + hastaDogumTarih +"; " + hastaTel +"; " + hastaKayitNo +"; " + hastaCinsiyet;

язичи.WriteLine(hastaBilgileri);


в этих командах я просто могу разделить каждую строку, которая является (hastaBilgileri), но я не мог разделить каждую информацию, которая является (hastaTC) или (hastaAdi) или (hastaSoyadi) или ......
вопрос здесь в том, как я мог бы разделить каждую информацию ?
спасибо за помощь :)

Рейтинг:
1

Maciej Los

Не видя содержимого текстового файла, я бы предложил начать с основ:
Как читать текст из файла[^]
Как: записать текст в файл[^]

Но у меня такое чувство, что вам нужно использовать XmlSerialization[^]


Member 12897180

спасибо, сэр, я действительно читал эти сайты, но я не понял, что такое XmlSerialization ?
если вы прочтете комментарий в решении 1, то поймете, что мне было нужно ..