masowy zapis zawartości plików .txt

Dział z pytaniami o absolutne podstawy programowania w C# (dla początkujących).

Moderator: xxSlayeRxx

masowy zapis zawartości plików .txt

Sponsor

Sponsor
 

masowy zapis zawartości plików .txt

Postprzez wladekarek » Wt maja 20, 2014 9:11 am

Witam!

Dla celów treningowych pisze program, który we wszystkich plikach .txt w folderze, napisze linijkę "nowalinijka" tuż pod wersem "staralinijka", jeżeli takowa wystąpi.

wyskrobałem coś takiego:
Kod: Zaznacz cały
//klasy kolejno odczytujące i zapisujące pliki .txt
//docelowo *.txt powinno oznaczać "każdy plik w folderze"
//niestety, już ta pierwsza linijka mi wysypuje mi się
StreamReader objReader = new StreamReader("c:\\nowy folder/*.txt");
StreamWriter objWriter = new StreamWriter("c:\\nowy folder/*txt");

//inicjujemy elementy, które będą zawierały odczytaną treść (o ile dobrze to rozumiem)
            string sLine = "";
            ArrayList arrText = new ArrayList();

//Do końca pliku
            while (sLine != null)
            {
                sLine = objReader.ReadLine();
                if (sLine != null)
                    arrText.Add(sLine);
                if (sLine == "staralinijka")
                    objWriter.WriteLine("nowalinijka");
            }

//i kończymy pracę
            objReader.Close();
objWriter.Close();





Czy zna ktoś lepszy sposób na wykonanie tej operacji, lub jest w stanie wskazać błąd w moim toku myślowym?
Z góry dziękuję za odpowiedź :)
wladekarek
New member
 
Posty: 5
Dołączył(a): Cz lis 07, 2013 11:03 am

Re: masowy zapis zawartości plików .txt

Postprzez wladekarek » Wt maja 20, 2014 11:18 am

Częściowo rozwiązałem problem dla jednego pliku. Tworzę dwie tablice, jedna będzie przechowywała dane z pliku .txt:
string[] lines = System.IO.File.ReadAllLines(@"C:\jakisfolder\jakisplik.txt");

druga będzie dłuższa od poprzedniej o 1, ponieważ wartość, którą dopiszemy wystąpi w pliku tylko raz, lub wcale. Do tej właśnie tablicy, tymczasowo, wrzucimy dane z pliku, które są już w tablicy lines.
string[] newLines = new string[lines.Length +1];

następnie inicjalizuje wartośc, która pozwoli mi przeskoczyć linijkę podczas kopiowania zawartości tablic.
int Licznik=0

Przedostatnim krokiem będzie przekopiowanie zawartości tablic z lines do newLines, ale z wstawieniem nowej wartości "nowalinijka" po "juzjest"

for (int i = 0; i < lines.Length; i++)
{

if (lines[i] == "juzjest")
{
newLines[i+Licznik] = "nowalinijka";
Licznik++;
}
else
newLines[i + Licznik] = lines[i];
}

Na koniec pozostaje wstawić zawartość newLines do pliku, ale to niestety nie chce działać :(
System.IO.File.WriteAllLines(@"C:\jakisfolder\jakisplik.txt", newLines);


Na szczęście w nieszczęściu, wiem, że nie mogę także stworzyć nowego pliku używając:
System.IO.File.CreateText("C:\\moj.txt");
ponieważ na windowsie 8 jest to utrudnione, ale z tym sobie poradzę.

Stąd moje pytanie: jak to zautomatyzować na wszystkie pliki .txt w folderze?
wladekarek
New member
 
Posty: 5
Dołączył(a): Cz lis 07, 2013 11:03 am

Re: masowy zapis zawartości plików .txt

Postprzez xxSlayeRxx » Wt maja 20, 2014 3:33 pm

ale Ty sie nakombinujesz :D

Kod: Zaznacz cały
foreach (var file in Directory.GetFiles("sciezka do folderu")
{
   var lines = File.ReadAllLines(file).ToList();
   var indexOfLine = lines.IndexOf("staralinijka");
   if (indexOfLine >= 0) lines.Insert(indexOfLine+1, "nowa linijka");
   File.WriteAllLines(file,lines)
}
xxSlayeRxx
Member
 
Posty: 661
Dołączył(a): Pt lip 08, 2011 10:24 pm

Re: masowy zapis zawartości plików .txt

Postprzez wladekarek » Pn maja 26, 2014 11:54 am

Simple Smart :)
Brak wiedzy faktycznie komplikuje życie programisty.
Wielkie dzięki za kod, poczytam sobie o tym czego użyłeś.
wladekarek
New member
 
Posty: 5
Dołączył(a): Cz lis 07, 2013 11:03 am

Re: masowy zapis zawartości plików .txt

Sponsors

Sponsor
 


Powrót do Newbie

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 gości

cron