#c#
#c#
Вопрос:
У меня есть поле списка, которое содержит информацию о студенте, в нем есть идентификатор студента и метка студента, когда я записываю в файл, я хочу, чтобы идентификатор студента и метка студента были в отдельных столбцах (например, первый идентификатор студента будет в A1, а их метка будет в B1. и так далее, пока все студенты не будут записаны в файл)
У меня есть этот код, но этот код добавляет информацию о студенте только в один столбец, как бы я мог разделить данные и поместить их в 2 столбца
if(lstMarks.Items.Count > 0)
{
using(TextWriter outputfile = new StreamWriter("StudentRecords.csv"))
{
foreach(string data in lstMarks.Items)
{
outputfile.WriteLine(data);
}
MessageBox.Show("Student Information inserted successfully");
}
}
Комментарии:
1. Как выглядят данные?
2. @Simon это StudentID и пометка, пример B00123: 19. Я сохраняю StudentID в структуре списка, а пометку — в другой структуре списка и добавляю их в список, добавляя обе переменные и используя «:» между ними, чтобы разделить их, поэтому я бы хотел, чтобы : удалялось при добавлении в файл, если это возможно
3. данные в CSV должны быть разделены, например, ‘,’
4. @vik_78 Могу ли я добавить какой-нибудь код в приведенный мной пример кода для этого?
5. Попробуйте
outputfile.WriteLine(string.Join(",", data.Split(':')));
Ответ №1:
Это сделает то, что вам нужно…
outputfile.WriteLine(string.Join(",", data.Split(':')));
Что это делает, сначала он разбивает строку data
, где он находит двоеточие, и это возвращает массив. string.Join()
Затем объединяет этот массив обратно в строку, используя запятую в качестве разделителя.
В качестве альтернативы вы могли бы использовать data.Replace(":", ",")
.
Комментарии:
1. Спасибо за объяснение, поэтому, когда вы говорите, что он возвращает массив, вы имеете в виду, что когда он разделяет «данные», он превращает данные в массив, прежде чем объединить их обратно?
2. Да, именно это.
3. Я только что видел, как вы редактировали свой пост, если бы я использовал replace, это было бы просто так
outputfile.WriteLine(data.Replace(":", ",")
4. Примечание стороны, это не очищает пробелы вокруг двоеточия, которые включены в данные вашего примера, поэтому на самом деле у вас будут выходные данные типа
B00123 , 19
вместоB00123,19
.5. ДА. Результат тот же. Для меня привычнее всего использовать метод split amp; join, поскольку замена строки в Javascript заменяет только первый экземпляр, поэтому вам придется использовать split amp; join (или регулярное выражение).
Ответ №2:
Вы можете создать строку и строку записи внутри вашего цикла foreach
Вам нужно будет разделить вашу строку, чтобы у вас были studentId
и studentMark
в массиве. Затем вы можете создать строку, разделенную запятой. Наконец, используйте flush
для очистки всех буферов
using(TextWriter outputfile = new StreamWriter("StudentRecords.csv"))
{
foreach(string data in lstMarks.Items)
{
var dataArray = data.split(':');
var line = string.Format("{0},{1}", data[0] , data[1]);
outputfile.WriteLine(line);
outputfile.Flush();
}
MessageBox.Show("Student Information inserted successfully");
}