Пример кода вы вывесили именно то, что вы спрашиваете:
- Открывает файл.
- Записывает строку HTML для таблицы с содержимым файла с шага 1 в другой файл.
Давайте разбить его:
var lines =File.ReadAllLines(args[0]);
Это открывает файл, указанный в аргументах [0] и читает все строки в массив строк, один лежал на элемент. См. File.ReadAllLines Method (String).
using (var outfs = File.AppendText(args[1]))
{
File.AppendText Method создает StreamWriter для добавления текста в существующий файл (или создает его, если он не существует). Имя файла (и путь, возможно) находится в args [1]. Оператор using
помещает StreamWriter в так называемый блок использования, чтобы обеспечить правильное размещение потока после того, как останется блок использования. См. using Statement (C# Reference) для получения дополнительной информации.
outfs.Write("<html><body><table>");
outfs.Write
вызывает метод записи в StreamWriter (StreamWriter.Write Method (String)). Фактически в случае вашего фрагмента кода ничего не записывается в файл до тех пор, пока вы не выйдете из блока использования - он записывается в буфер. Выход из используемого блока приведет к сбросу буфера и записи в файл.
foreach (var line in lines)
Эта команда запускает цикл по всем элементам в массив строк lines
, глядя с первым элементом (0) индекса. См. foreach, in (C# Reference) для получения дополнительной информации, если вам это нужно.
outfs.Write("<tr><td>" + string.Join("</td><td>", line.Split(',')) + "</td></tr>");
String.Join - ключевая часть здесь, где большая часть работы выполнена.String.Join Method (String, String[]) имеет технические подробности, но в основном то, что здесь происходит, состоит в том, что второй аргумент (line.Split(',')
) передается в массиве строк, а строки в этом массиве затем объединяются вместе с первым аргументом (</td><td>
) в качестве разделителя, и строка таблицы открывается и закрывается.
Например, если строка «1,2,3,4,5,6», то Split
дает вам 6-элементный массив. Затем этот массив объединяется с </td><td>
в качестве разделителя на String.Join
, поэтому у вас есть "1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6"
. "<tr><td>"
добавлен в начало и "</td></tr>"
добавлен в конец, а окончательная строка - "<tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td></tr>"
.
outfs.Write("</table></body></html>");
}
Это записывает конец HTML в буфер, который затем очищается и записывается в указанный текстовый файл.
Несколько вещей, чтобы отметить. args[0]
и args[1]
используются для хранения аргументов командной строки (т. Е. MakeMyTable.exe InFile.txt OutFile.txt), которые (по моему опыту) не применимы к приложениям ASP.NET. Вам нужно либо запрограммировать файлы (и пути), либо разрешить пользователю указывать входной файл и/или выходной файл. Приложение ASP.NET должно запускаться под учетной записью, имеющей разрешение на доступ к этим файлам.
Если вы указали значения в CSV-файле, вам придется обрабатывать их (это очень часто встречается, например, при использовании денежных сумм), так как разделение на ,
может привести к некорректному разделению. Я рекомендую взглянуть на TextFieldParser, так как он может обрабатывать поля с котировкой довольно легко.
Если вы не уверены, что каждая строка в файле имеет одинаковое количество полей, вы рискуете иметь плохо сформированный HTML в своей таблице и никаких гарантий относительно того, как он будет отображаться.
Кроме того, было бы полезно проверить, что файл, который вы открываете, существует. Там, вероятно, больше, но это основы (и, возможно, уже выходит за пределы стека переполнения).
Массивы: http://msdn.microsoft.com/en-us/library/aa288453%28v=vs.71%29.aspx –
Чтение текстовых файлов: http://www.csharp-station.com/HowTo /ReadWriteTextFile.aspx –
Каков ваш конкретный вопрос? –