krs22
-
Postów
6 -
Dołączył
-
Ostatnia wizyta
Typ zawartości
Profile
Forum
Wydarzenia
Odpowiedzi opublikowane przez krs22
-
-
Wczytywanie calego pliku przehodzi, bo gdy zapisyje ten odczytany ciag do innego pliku oba sa takiej samej wielkosci i z ta sama zawartoiscia.
Problemu wysypywania sie przy duzej dlugosci ciagu nie ma gdy zrobie tak:
string str = ciag.ReadToEnd(); string[] strarray = str.Split(' '); float[] intarray = new float[strarray.Length]; for (int i = 0; i < strarray.Length; i++) { intarray[i] = Convert.ToByte(strarray[i]); Console.Write(i); Console.Write(" :"); Console.Write(intarray[i]); tw.Write(intarray[i]); tw.Write(" "); }
Jednak plik do kotrego zapisuje tW.Write lekko sie rozni od pierwowzoru test.txt ma 534'335 a wyjsciowy 532'840.
-
Może zacznijmy od tego czy piszesz jakąś pracę zaliczeniową czy też coś dla siebie. Jeśli to drugie, to radzę zmienić format z bliku tekstowego na binarny, bo jeżeli będziesz to konwertował na bitmapę, to nie ma sensu tracić mocy na konwersję każdego znaku.
Na prace zaliczeniowa. Najprostszym rozwiazaniem bylo by chyba zczytywanie znak po znaku i przypisywanie od razu wartosci ale nie wychodzilo mi to i probowałem wczytywac caly pllik zamieniac na tablice i przypisywac wartosci.
Oto kod do ktorego to potrzebuje:
for (i = 0; i < openFileDialog1.FileNames.Length; i++) { progressBar1.Value++; this.Refresh(); string newFile; //newFile = openFileDialog1.FileNames[i].ToString(); System.Drawing.Bitmap image = new System.Drawing.Bitmap(512, 512); newFile = Path.GetDirectoryName(openFileDialog1.FileNames[i]) + Path.DirectorySeparatorChar + Path.GetFileNameWithoutExtension(openFileDialog1.FileNames[i]) + ".bmp"; int m = 0; //BinaryReader br; //br = new BinaryReader(new FileStream(openFileDialog1.FileNames[i],FileMode.Open)); for (int x = 0; x < image.Width; ++x) { for (int y = 0; y < image.Height; ++y) { // Tutuaj wczytywanie pixela z txt i przypisywanie wartosci image.SetPixel(x, y, Color.FromArgb(255,k,k,k)); } } image.Save(newFile); br.Close(); }
A oto funkjca zapisujaca
for (i = 0; i < openFileDialog1.FileNames.Length; i++) { double k; progressBar1.Value++; this.Refresh(); string newFile; newFile = openFileDialog1.FileNames[i].ToString(); newFile = Path.GetDirectoryName(openFileDialog1.FileNames[i]) + Path.DirectorySeparatorChar + Path.GetFileNameWithoutExtension(openFileDialog1.FileNames[i]) + ".txt"; Bitmap image = new Bitmap(openFileDialog1.FileNames[i].ToString()); int m = 0; StreamWriter fs; fs = new StreamWriter(newFile); for (int y = 0; y < image.Height; y++) { for (int x = 0; x < image.Width; x++) { Color col = image.GetPixel(x, y); byte red_pixel = col.R; byte green_pixel = col.G; byte blue_pixel = col.B; k = (red_pixel*0.299 + green_pixel*0.587 + blue_pixel*0.114); fs.Write(k); fs.Write(" "); } fs.WriteLine(); } fs.Close(); }
Dodam, ze bitmapy maja zawsze rozmiar 512*512 wiec o bledy wynikajace z niewlasciwego rozmiaru bitmapy lub tablicy nie nalezy sie martwic.
-
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace ConsoleApplication1 { public class Program { public static void Main(String[] args) { if (args.Length < 1) { Console.WriteLine("Wywołanie programu: Program plik"); return; } String plik = args[0]; FileInfo file = new FileInfo(plik); string newFile, newFileWOext; newFile = Path.GetDirectoryName(plik) + Path.DirectorySeparatorChar + Path.GetFileNameWithoutExtension(plik) + ".new"; newFileWOext = Path.GetFileNameWithoutExtension(plik) + ".new"; try { Console.WriteLine("lol, plik"); Console.ReadKey(); TextReader ciag = new StreamReader(plik); Console.WriteLine("lol2, plik"); Console.ReadKey(); int[] tablica = ciag.ReadToEnd().Split(' ').Select(i => int.Parse(i)).ToArray(); foreach (int i in tablica) { Console.WriteLine(i); } Console.ReadKey(); } catch (Exception) { Console.WriteLine("Wystąpił błąd podczas odczytu z pliku {0}.", plik); return; } } } }
Dziala dla malego pliku, gdy probuje wyswietlic ten 512*512 nie przehodzi.
Dziekuje za podpowiedz z Net3.0.
-
Oto moj kod. Programik dostaje plik, wyswietla na ekranie co sie dzieje i zapisuje do pliku o zmienionym rozszerzeniu.
using System; using System.Collections.Generic; using System.Text; using System.IO; public class Program { public static void Main(String[] args) { if (args.Length < 1) { Console.WriteLine("Wywołanie programu: Program plik"); return; } String plik = args[0]; FileInfo file = new FileInfo(plik); string newFile, newFileWOext; newFile = Path.GetDirectoryName(plik) + Path.DirectorySeparatorChar + Path.GetFileNameWithoutExtension(plik) + ".new"; newFileWOext = Path.GetFileNameWithoutExtension(plik) + ".new"; StreamReader sr; StreamWriter fs; try { sr = new StreamReader(plik); fs = new StreamWriter(newFile); } catch (Exception) { Console.WriteLine("Otwarcie pliku {0} nie powiodło się.", plik); return; } try { int m = 0; string linia = sr.ReadToEnd(); //int[][] tablica; int[]tablicaLiczb = Array.ConvertAll<string, int>(linia.Split(' '),new Converter<string, int>(int.Parse)); /* List<int[]> lista = new List<int[]>(); while ( ( linia = sr.ReadLine() ) != null ) { int[] tablicaLiczb = Array.ConvertAll<string, int>( linia.Split( ' ' ), new Converter<string, int>( int.Parse ) ); lista.Add( tablicaLiczb ); } tablica = lista.ToArray(); */ for (int i = 0; i < 4;i++) { for (int j = 0; j < 4; j++) { m=m+1; Console.Write(m); Console.Write(" :"); Console.WriteLine(tablicaLiczb[m]); fs.Write(tablicaLiczb[m]); fs.Write(" "); Console.ReadKey(); } } sr.Close(); fs.Close(); } catch (Exception) { Console.WriteLine("Wystąpił błąd podczas odczytu z pliku {0}.", plik); return; } } }
Dziala dla pliku np
new.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
To jest moja proba aby sprawdzic dzialanie tego parsera. i dziala jednak nie wiedzac czemu czyta plik od drugiej linii. Jednak zmieniajac to w petle [512][512] program zwraca blad. Analizujac gdzie jest blad doszedlem do tego ze chyba ta funkjca convert nie obsluguje takich dlugich ciagow.
Generalnie musze to wykorszytac aby z ciagu znakow 512*512 odczytywac z pliku tekstowego wartosci skali szarosci (0-255). i tworzenia z tego bitmapy w skali szarosci.
przykladowy plik
www.files.aristocracy.pl/krs/test.txt
-
Witam
Potrzebuje odczytac plik tekstowy w ktorym zapisane sa wartosci od 0-255 odzielone spacjami. Dokladnie jest to 262144 znakow.
Wczytuje je za pomoca FileStream ReadTo End gdyz ciag jest nieprzerywany znakami podzialu.
Potrzebuje stworzyc z tego tablice jednowymiarowa .
string PixelData = sr.ReadToEnd(); int[] tablica = Array.ConvertAll<string, int>(PixelData.Split(' '), new Converter<string, int>(int.Parse));
Probowalem to zrobic z listami jak w przykladzie wyzej ale nie wychodzi. Gdyby ktos mogl poprawic bylbym bardzo wdzieczny.
[c#] Tablica wielowymiarowa
w .NET Framework (C#, ASP.NET itp.)
Opublikowano
No tak, fakt teraz pliki wygladaja tak samo :-). Mozna spokojnie isc spac.
Powyzszy kod odczytuje plik podany w argumencie, czyta liczby i zapisuje je do pliku o tej samej nazwie ze zmienionym rozszerzeniem. Moze komus sie przyda. :-)
Jutro pobawie sie w przypisywanie danych z przeczytanej tablicy do tablicy pixeli. Oby sie udalo :-). Dziekuje za pomoc.