Problem z usupełnianiem niewystępujących wierszy do bazy wierszy w pliku txt

0

Witam koledzy fachowcy...

Mam pewien problem. Usiłuje zrobić programik gdzie pod klawiszem sprawdza mi czy wiersz z pliku "k.txt" nie występuję w pliku "baza.txt", jeśli nie występuje to go dopisuje na końcu w pliku "baza.txt". Skleciłem poniższy kod i niestety nie hula tak jak powinien. Będę bardzo wdzięczny za waszą cenną dla mnie pomoc !

private void button1_Click(object sender, EventArgs e)
{
if (File.Exists("K.TXT"))
{
StreamReader sr = new StreamReader("K.TXT");
wiersz_kolektor = sr.ReadLine();
bool kolektor_exists = false;
while (wiersz_kolektor != null)
{

                StreamReader sr1 = new StreamReader("BAZA.TXT");
                wiersz_baza = sr1.ReadLine();
                while (wiersz_baza != null && !kolektor_exists)
                {
                    if (wiersz_kolektor == wiersz_baza)
                    {
                        kolektor_exists = true;
                    }
                    wiersz_baza = sr1.ReadLine(); 
                }
                sr1.Close();
                if (kolektor_exists == false)
                {

                    StreamWriter sr2 = new StreamWriter("BAZA.TXT");
                    sr2.WriteLine(wiersz_kolektor);
                    sr2.Flush();
                    sr2.Close();
                }
                wiersz_kolektor = sr.ReadLine(); 
            }
            sr.Close();
        }
    }
0
string[] originalRows = File.ReadAllLines(@"D:\TempDev\baza.txt");
string[] newRows = File.ReadAllLines(@"D:\TempDev\k.txt");

string[] resultRows = originalRows.Union(newRows).ToArray();

File.WriteAllLines(@"D:\TempDev\all.txt", resultRows); 
0

Nie wiem co jaśniej tu można opisać. Po kolei (wg numerek linijek):

  1. Odczyt linijek z pliku 1 do tablicy.
  2. Odczyt linijek z pliku 2 do tablicy.
  3. Obliczenie sumy obu zbiorów.
  4. Zapisanie sumy do pliku.
0

Super. Działa. Tylko nie do końca tak jak trzeba... mianowicie ... plik k.txt jest w całości przepisywany do pliku all.txt w efekcie... mimo tego że w baza.txt jest to samo co w k.txt. Zależy mi na tym by do pliku baza.txt dopisywał jedynie wiersze których nie było wcześniej a pojawiły się w pliku k.txt. Chodzi o to by zrealizować takie coś: Do odpowiedniej lokalizacji wrzucany jest plik(tutaj k.txt) Następnie program w pętli sprawdzałby czy pojawił się tam plik k.txt. - jesli tak to niech go sprawdzi z bazą która jest tworzona na dysku PC ( tutuaj baza.txt ). W przypadku kiedy wiersz pochodzący z pliku k.txt nie występuje w baza.txt - to dopisuje go w tymże pliku - baza.txt. Teraz po prostu tylko kopiuje zawartość pliku k.txt i przepisuje go do all.txt.

0

Czyli na czym konkretnie polega Twój problem? Nie możesz sam zmienić ścieżkę do zapisu w metodzie File.WriteAllLines na baza.txt?
Prawdopodobnie nie rozumiem tego, co napisałeś. Możesz podać przykład plików baza.txt i k.txt przed kopiowaniem oraz pliku baza.txt po kopiowaniu?

Jeszcze taka uwaga - nie ma sensu sprawdzać w pętli, czy jakiś plik się pojawił na dysku. Od tego jest klasa FileSystemWatcher: http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx

0
somekind napisał(a)
string[] originalRows = File.ReadAllLines(@"D:\TempDev\baza.txt");
string[] newRows = File.ReadAllLines(@"D:\TempDev\k.txt");

string[] resultRows = originalRows.Union(newRows).ToArray();

File.WriteAllLines(@"D:\TempDev\all.txt", resultRows); 

po co aż tak kombinować, po co ci te tablice? ;-)

  File.WriteAllLines("c.txt",File.ReadAllLines("a.txt").Union(File.ReadAllLines("b.txt")));
0

Mam nadzieję, że to był żart, ale nie uczmy "newbie" złych nawyków ;)
Niech wie, że tak można.

Pewną optymalizację uzyskasz wyrzucając ToArray():

IEnumerable<string> resultRows = originalRows.Union(newRows);

można też nie podawać typów, zdać się na var:

var originalRows = File.ReadAllLines(@"D:\TempDev\baza.txt");
var newRows = File.ReadAllLines(@"D:\TempDev\k.txt");
var resultRows = originalRows.Union(newRows);
File.WriteAllLines(@"D:\TempDev\all.txt", resultRows);

0 użytkowników online, w tym zalogowanych: 0, gości: 0