#c# #csv
#c# #csv
Вопрос:
Я генерирую CSV, это мой код:
public ActionResult MethodName()
{
List<ModelName> m = new List<ModelName>();
StringBuilder sb = new StringBuilder();
foreach (ModelName s in m)
{
sb.Append(s.FName).Trim();
sb.Append(",");
sb.Append(s.SName).trim();
sb.Append(","); /* I doubt you want this one */
sb.AppendLine();
}
byte[] bytes = Encoding.UTF8.GetBytes(sb.ToString());
return File(bytes, "text/comma-separated-values", "FileName.csv");
}
Данные, которые я получаю, выглядят примерно так, когда я нажимаю f12
FName
,SName
,Address, Zipcode
,somethingElse
Здесь я хочу иметь файл .csv, где первый столбец содержит FName, второй столбец SName, адрес третьего столбца и т.д… да, я не поместил адрес в свой код, но это легко, как только я узнаю, почему все эти данные находятся в разных строках
обновление
fname
sname
Комментарии:
1. Проверьте, как
FName
иSName
откудаModelName
. Их можно сохранить с символом новой строки.
Ответ №1:
Попробуйте это:
foreach (ModelName s in m)
{
sb.Append(s.FName.ToString().Replace("n",""));
sb.Append(",");
sb.Append(s.SName.ToString().Replace("n",""));
sb.Append(","); /* I doubt you want this one */
sb.AppendLine();
}
Комментарии:
1. Я получаю сообщение об ошибке при вводе этой строки `sb.Append(s.FName. Replace(» n»,»»));` он говорит
Non-invocable member ModelName.FName cannot be used like a method
?2. @User911: вам необходимо вызвать toString перед применением метода Replace, проверьте мой отредактированный ответ
3. ваш правильный, я это исправил. но ваше решение дает тот же результат, я получаю fname в одном столбце и sname во втором столбце ниже первого — см. Мой вопрос
4. @User911: можете ли вы отладить и посмотреть, что именно
s.SName
s.FName
содержит и?5. когда я нажимаю f12, fname — это, например, Jack, а sname — Mack. Я думаю, это потому, что во второй строке мы говорим
sb.Append(s.SName..
, что добавляем после имени, но я хочу, чтобы sname был в той же строке (следующая ячейка), а не в следующей строке