Bardzo prosto:
static void Main(string[] args)
{
string[] daneZPliku = File.ReadAllLines(@"D:\TempDev\Rafal_ql.txt");
List<string> poprawioneDane = new List<string>();
string nowaLinia = string.Empty;
for (int i = 0; i < daneZPliku.Length; i++)
{
if (daneZPliku[i].StartsWith("\"FS\""))
{
nowaLinia = daneZPliku[i];
}
else
{
nowaLinia += daneZPliku[i];
}
if (i == daneZPliku.Length - 1 || string.IsNullOrEmpty(daneZPliku[i]))
{
poprawioneDane.Add(nowaLinia);
}
}
foreach (string s in poprawioneDane)
{
Console.WriteLine(s);
}
Console.ReadLine();
}
W poprawioneDane
zawiera linie bez enterów.
Niestety kod nie robi tego zbyt dokładnie :(
Każdą linię wypisuje mi po 4 razy i nie wiem jak zrobić, że jak program napotka linię "FS", to ma też zapamiętać linijkę [ZAWARTOSC] należącej do "FS"
Przykład danych wejściowych:
[NAGLOWEK]
"FS",0,1,"dana1",dana2,"dana3
dalej dana3
caly czas dana3,dana4,"dana5"
[ZAWARTOSC]
"23",dana1,dana2, ...
[NAGLOWEK]
"FZ", <----------- TEGO MA NIE CZYTAĆ
[ZAWARTOSC]
"23",dana1,dana2 <-------------- TEGO TEZ MA NIE CZYTAĆ
[NAGLOWEK]
"FS",0,1,"dana1",dana2,"dana3",dana4,"dana5"
[ZAWARTOSC]
"23",dana1,dana2, ...
Program ma odczytywac tylko linie [NAGLOWEK] które zaczynają się od "FS"
Schemat linii "FS" jak widać nie jest stały (w niektórych liniach występuje załamanie linii),
ale zawsze po nagłówku "FS" występuje [ZAWARTOSC](gdzie zawsze jest jedna linia zaczynająca się od "23")
chcę posklejać linię "FS" (Jeżeli będzie ona załamana) i zapisać również dane z [ZAWARTOSC]
Mój kod:
private void button3_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
string[] tekst = File.ReadAllLines(path1, Encoding.GetEncoding("ISO-8859-2")); //wczytaj wszystkie linie
string[] slowo = new string[0]; //tworzy tablice do zapisywania danych z [NAGLOWEK]
string[] zawartosc = new string[0];// tworzy tablice do zapisywania danych z [ZAWARTOSC]
int licznik = 4;
int index = 1;
foreach (string linia in tekst)
{
if (linia.StartsWith("\"FS\"")) //czy linijka to FS?
{
licznik = 0;
slowo = linia.Split(new string[] { "," },
StringSplitOptions.None).ToArray(); //oddziela slowa przecinkiem i załamaniem(a załamania nie chcę tu )
string liniaFS = ( // zapisuje potrzebne dane z lini [NAGLOWEK]
slowo[0] // "FS"
+ slowo[2] // 1
+ slowo[5]); // dana3
listBox1.Items.Add(liniaFS); // wyswietla dane w listbox-ie
//licznik = 0;
index++;
}
else
{
licznik++;
if (licznik == 3) // tutaj jeżeli znajdzie linie "FS" to program zapisze 3 linijke pod "FS" czyli linie zawartosci ("23",dana1,dana2 itd.) ale jezeli linia "FS
// jest zalamana, to wyswietla blad :(
{
zawartosc = linia.Split(new string[] { ",", ",\"", "[", "\r\n" },
StringSplitOptions.None).ToArray(); //oddziela slowa
string liniaZAWARTOSC = ( // zapisuje potrzebne dane z lini [ZAWARTOSC]
zawartosc[0] //"23"
+ zawartosc[1] //dana1
+ zawartosc[2] //dana2
);
listBox1.Items.Add(liniaZAWARTOSC); // wyswietla dane w listbox-ie
listBox1.Items.Add("\n"); // każdą linijkę "FS" i jej [ZAWARTOSC] oddziela pustym wierszem
}
}
}
}
}
Cały weekend siedzę nad tym i nie mogę sobie poradzić :/
Mam nadzieję, że mój problem jest dokładnie opisany i zrozumiały.
Byłbym bardzo wdzięczny za jakąkolwiek pomoc.
Dziękuje za wszystko.