all,
I started out with what i thought was going to be a pretty simple task. (convert a csv to "wiki" format) but im hitting a few snags that im having trouble working through
I have 3 main problems
1) some of the cells contain \r\n ( so when reading line by line this treats each new line as a new cell
2) some of the rows contain "," ( i tried switching to \t delemited files but im still running into a problem escaping when its between two "")
3) some rows are completely blank except for the delmiter ("," or "\t") others are incomplete (which is fine i just need to make sure that the cell goes in the correct place)
I've tried a few of the CSV reader classes but they would bump up agenst of teh problems listed above
I'm trying to keep this app as small as possible so i am also trying to avoid dlls and large classes that only a small portion do what i want.
so far i have two "attempts that are not working
Atempt 1 (doesn't handel \r\n in a cell)
OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); openFileDialog1.Filter = "tab sep file (*.txt)|*.txt|All files (*.*)|*.*"; openFileDialog1.FilterIndex = 1; openFileDialog1.RestoreDirectory = true; if (openFileDialog1.ShowDialog() == DialogResult.OK) { if (cb_sortable.Checked) { header = "{| class=\"wikitable sortable\" border=\"1\" \r\n|+ Sortable table"; } StringBuilder sb = new StringBuilder(); string line; bool firstline = true; StreamReader sr = new StreamReader(openFileDialog1.FileName); sb.AppendLine(header); while ((line = sr.ReadLine()) != null) { if (line.Replace("\t", "").Length > 1) { string[] hold; string lead = "| "; if (firstline && cb_header.Checked == true) { lead = "| align=\"center\" style=\"background:#f0f0f0;\"| "; } hold = line.Split('\t'); sb.AppendLine(table); foreach (string row in hold) { sb.AppendLine(lead + row.Replace("\"", "")); } firstline = false; } } sb.AppendLine(footer); Clipboard.SetText(sb.ToString()); MessageBox.Show("Done!"); } } string header = "{| class=\"wikitable\" border=\"1\" "; string footer = "|}"; string table = "|-"; attempt 2 ( can handle \r\n but shifts cells over blank cells) (its not complete yet)
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); openFileDialog1.Filter = "txt file (*.txt)|*.txt|All files (*.*)|*.*"; openFileDialog1.FilterIndex = 1; openFileDialog1.RestoreDirectory = true; if (openFileDialog1.ShowDialog() == DialogResult.OK) { if (cb_sortable.Checked) { header = "{| class=\"wikitable sortable\" border=\"1\" \r\n|+ Sortable table"; } using (StreamReader sr = new StreamReader(openFileDialog1.FileName)) { string text = sr.ReadToEnd(); string[] cells = text.Split('\t'); int columnCount = 0; foreach (string cell in cells) { if (cell.Contains("\r\n")) { break; } columnCount++; } } basically all I needs is a "split if not between \" " but im just at a loss right now
any tips or tricks would be greatly appreciated