Zapis do pliku w pętli for + if

0

W związku z tym, że nikt nie wie jak sprawić by za pętlą foreach wstawić nową linię, postanowiłem kombinować z indeksami ale nie za bardzo wiem czy dobrze kombinuję.

partToDecode to string z pętli powtarzający się i razy i wygląda tak

13u?etPv2;0n:dDPwUM1U1Cb069D
400TcdiuiT7VDR>3nIfr6>i00000
...

Output jaki mnie interesuje:

0100101010101001010100101010...//zazwyczaj 168 bitów
0101010100101011100001001010...
...

Kod niedziałający (zlany tekst kilka k bitów)

for (var p = 0; p < partToDecode.Length; p++)
{ 
      var part = partToDecode[p] - 48;
      if (part > 40)
      {
            part = part - 8;
      }
      StringBuilder parts = new StringBuilder();
      string suma = Convert.ToString(part, 2).PadLeft(6, '0');
      parts.Append(suma);
      int count = partToDecode.Count();
      if (count == partToDecode.Length)
      {
      File.AppendAllText(@"C:\Users\jakub\OneDrive\Pulpit\SomeOtherFile3.txt", parts.ToString() + "\n");
      }

Kod niedziałający 2 (tylko 1 linia 168 bitów, nie wykonuje drugiej iteracji for)

foreach (char p in partToDecode)
{
             var part = p - 48;
             if (part > 40)
             {
                   part = part - 8;
             }
             StringBuilder parts = new StringBuilder();
             string suma = Convert.ToString(part, 2).PadLeft(6, '0');
             parts.Append(suma);
             int count = partToDecode.Count();
             if (partToDecode.IndexOf(p) < partToDecode.Length)
             {
                      File.AppendAllText(@"C:\Users\jakub\OneDrive\Pulpit\SomeOtherFile3.txt", parts.ToString());
             }
             else
             {
                                File.AppendAllText(@"C:\Users\jakub\OneDrive\Pulpit\SomeOtherFile3.txt", parts.ToString() + "\n");
              }

Miałem też 3 przypadek nowej linii co każdy char z parttodecode (6 bitów 01) ale nie pamiętam już co go powodowało, chyba stworzenie za pętlą foreach pustej zmiennej i wypisywanie pustej zmiennej + nowej linii.
Ktoś ma jakiś pomysł? Czyli generalnie if (iteracja p == długość parttodecode) = file.append zmienna + new line, jak nie to bez new line
Oczywiście samo p nie zadziała bo da wartość p, potrzebny jest index, którego nie kminię jak tam wstawić. Czy to wykonalne?

1

Musisz mieć linie wpisywane na bieżąco? Co jeśli najpierw wygenerowałbyś odpowiednio zawartość pliku, a później to całe zapisał? Myślę, że StringBuilder sobie z tym poradzi.

0

@AdamWox:
No ta pętla konwertuje i wypisuje od razu, ale może być wypisywanie za pętlą tylko wtedy nie wiem jak przenieść stringbuildera za pętlę

2

Przed pętlą robisz obiekt buildera, w pętli wpisujesz odpowiednie linie w odpowiednim formacie, na końcu, po zakończeniu pętli zapisujesz zawartość buildera do pliku.

StringBuilder sb = new StringBuilder();
for (var p = 0; p < partToDecode.Length; p++)
{
    string suma = Convert.ToString(part, 2).PadLeft(6, '0');
    sb.Append(suma + Environment.Newline);
}
File.AppendAllText(@"C:\Users\jakub\OneDrive\Pulpit\SomeOtherFile3.txt", sb.ToString());
1
Simao12 napisał(a):

W związku z tym, że nikt nie wie jak sprawić by za pętlą foreach wstawić nową linię

Cóż za urażony ton ... Najwyższa Wysokość się nie przejmuje, wszyscy wybitni ludzie zostali rozpoznani dopiero po śmierci

postanowiłem kombinować z indeksami ale nie za bardzo wiem czy dobrze kombinuję.

Brzydkie to jak cholera... nawet nie założyłeś sobie jakiejś postaci danych wewnętrznych, z tych odprysków kodu myślę, ze typy danych przyjąłeś fatalnie 1)
Szyjesz na kolanie.

  1. choć to tylko mniemanie w stylu na kupie gruzu "co tu dawniej było"
0

@AnyKtokolwiek:
Nie miało to tak brzmieć, chciałem przedstawić problem, że bałagan to wiem, przejmuję się tylko tym żeby to zadziałało, nigdy wcześniej nie programowałem. Jedyne dane w tej pętli to partToDecode z wcześniejszej. Wcześniej jest większy porządek, to co wyżej to brudnopis, który nie działa.

@AdamWox:
https://pastebin.pl/view/696da7df taki output ciekawy. Najlepsze jest to, że każdy char jest zamieniany na 6 znaków a mimo to w jednej linii jest niepodzielne przez 6 - 32

Jak połączyłem to otrzymałem wymagane 13 lnijek (tyle ma plik tekstowy), jednak output nie jest taki jak powinien bo coś z konwertowaniem się zepsuło. (edit: znalazłem, jak się przechodzi z foreach do for to trzeba zmienić p z obliczeń na index stringa.

StringBuilder sb = new StringBuilder();
for (var p = 0; p < partToDecode.Length; p++)
{
     var part = p - 48;
     if (part > 40)
     {
         part = part - 8;
     }
 string suma = Convert.ToString(part, 2).PadLeft(6, '0');
 if (p + 1 != partToDecode.Length)
 {
       sb.Append(suma);
 }
 else
 {
       sb.Append(suma + Environment.NewLine);
 }
 }
      File.AppendAllText(@"C:\Users\jakub\OneDrive\Pulpit\SomeOtherFile3.txt", sb.ToString());
0

hej

a sprawdzasz czy ten plik jest ? SomeOtherFile3.txt.. a jak go nie będzie to co zrobi aplikacja ?

1

"że bałagan to wiem, przejmuję się tylko tym żeby działało" to jak powiedzieć "mam burdel w pokoju ale nie obchodzi mnie to, chce znaleźć tylko to co zgubiłem" 😂

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