Witam wszystkich,
Może i problem dla wielu z Was wydawać się błahy, jednak potrzebuję pomocy. Mam do napisania na poprawkę program, który ma operować na csv'kach i elemencie listview. Poprzednio zawaliłem sprawę, gdyż nie wiedziałem, że wykładowca jest strasznie uczulony na funkcję wymienioną w temacie. Zaproponował użycie prasera bądź gotowej biblioteki. Jednak sam za bardzo nie wiem jak to ogarnąć.
Poprzednio kod wyglądał w taki sposób:
Odczyt:
var parsedData=new List<string[]>();
using (OpenFileDialog otwieraniepliku = new OpenFileDialog())
try
{
//Otwieranie pliku
otwieraniepliku.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
otwieraniepliku.DefaultExt = "csv";
otwieraniepliku.Title = "Otwórz plik";
otwieraniepliku.Filter = "Dokumenty (*.csv)|*.csv";
//Interakcja po zatwierzeniu
if (otwieraniepliku.ShowDialog() == DialogResult.OK)
{
listView1.Items.Clear();
FileStream srcFS;
srcFS = new FileStream(otwieraniepliku.FileName, FileMode.Open);
StreamReader srcSR = new StreamReader(srcFS,System.Text.Encoding.Default);
string line;
int k=0, p=0;
bool firstLine=true;
//Odczytywanie linii z pliku tekstowego
while ((line = srcSR.ReadLine()) != null)
{
if (firstLine != true)
{
string row3;
string[] rows = line.Split(',');
for (int i = 0; i < line.Length; i++)
{
if (line[i] == '')
{
p = i;
p++;
break;
}
}
line = line.Remove(0, p);
for (int i = line.Length - 1; i > 0; i--)
{
if (line[i] == '')
{
k = i;
break;
}
}
row3 = line.Remove(k, line.Length - k);
ListViewItem item = new ListViewItem(rows[0]);
item.SubItems.Add(rows[1]);
item.SubItems.Add(row3);
item.SubItems.Add(rows[rows.Length - 2]);
item.SubItems.Add(rows[rows.Length - 1]);
listView1.Items.Add(item);
}
firstLine = false;
}
srcSR.Close();
}
toolStripButton2.Enabled = activetoolStripButton2(listView1);
zapiszToolStripMenuItem.Enabled = toolStripButton2.Enabled;
}
catch (Exception errorMsg)
{
MessageBox.Show(errorMsg.Message,"Błąd odczytu pliku",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
updateSelectedRecord();
Zapis:
bool firstLine = true;
using (SaveFileDialog zapisaniepliku = new SaveFileDialog())
try
{
zapisaniepliku.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
zapisaniepliku.DefaultExt = "csv";
zapisaniepliku.Title = "Zapisz plik";
zapisaniepliku.FileName = "baza_danych";
zapisaniepliku.Filter = "Dokumenty (*.csv)|*.csv";
if (zapisaniepliku.ShowDialog() == DialogResult.OK)
{
FileStream destFS;
destFS = new FileStream(zapisaniepliku.FileName, FileMode.Create);
StreamWriter destSW = new StreamWriter(destFS, System.Text.Encoding.Default);
if (firstLine == true)
{
firstLine = false;
destSW.Write(this.listView1.Columns[0].Text+",");
destSW.Write(this.listView1.Columns[1].Text+",");
destSW.Write(this.listView1.Columns[2].Text+",");
destSW.Write(this.listView1.Columns[3].Text+",");
destSW.Write(this.listView1.Columns[4].Text+"\r\n");
}
for (int i = 0; i < listView1.Items.Count; i++)
{
for (int j = 0; j < 5; j++)
{
if (j != 2)
{
destSW.Write(this.listView1.Items[i].SubItems[j].Text);
if (j + 1 < 5)
destSW.Write(",");
}
else
{
destSW.Write(this.listView1.Items[i].SubItems[j].Text);
destSW.Write(",");
}
}
destSW.Write("\r\n");
}
destSW.Close();
}
}
catch (Exception errorMsg)
{
MessageBox.Show(errorMsg.Message, "Błąd odczytu pliku", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
Dodam jeszcze, że program ma z góry określoną liczbę kolumn (pola tj. imię, nazwisko, adres, telefon, email).
Wyżej pokazany łobuz wysypał się na wpisaniu znaków specjalnych. Będę niezmiernie wdzięczny jeśli ktoś nakieruje mnie na dobrą drogę.