我在.csv文件中读到。
其内容如下:
1;“final60”;“英国”;“2013-12-06 15:48:16”;
2;“donnyr8”;“荷兰”;“2013-12-06 15:54:32”;等
目前我只想使用Replace
方法从每行中删除引号。这就是我所尝试的似乎没有做任何事情的事情。虽然似乎无论如何都没有打破这个计划。
try
{
string item2;
List<string> list = File.ReadLines("file.csv").ToList();
foreach (string listLine in list)
{
Console.Write("# ");
// seperate up this line into a new list by ;
List<string> listItems = listLine.Split(';').ToList();
foreach(String item in listItems)
{
if (item == """)
{
item2 = item.Replace(""", "");
}
else
{
item2 = item;
}
Console.Write(item2);
}
Console.WriteLine("\n");
}
}
catch (Exception e)
{
// Let the user know what went wrong.
Console.WriteLine("The file could not be read:");
Console.WriteLine(e.Message);
}
如何删除每行中的引号?
答案 0 :(得分:4)
使用一些现有的CSVParser而不是手动执行此操作要容易得多。 你可以使用例如:
手动解析CSV文件会带来很多潜在风险。即使您解决了上述挑战,也无法确定在您的CSV文件无法正确解析时不会出现其他情况。
答案 1 :(得分:3)
一种方法是使用Regex,考虑这种模式:
\"
它将匹配字符串中的所有"
,因此您可以执行以下操作:
var s = Regex.Replace(input, pattern, string.Empty);
此处input
将是整个文件,甚至只是一行,模式为\"
,s
将在删除后生成string
双引号。
答案 2 :(得分:1)
它不起作用的原因在于:
List<string> listItems = listLine.Split(';').ToList();
foreach(String item in listItems)
{
if (item == """) {
item2 = item.Replace(""", "");
}
}
考虑一下item
将要包含哪种数据,因为您似乎正在检查char
是否等于"
,这是正确的做,但也许item
不是char?想一想List<string> listItems = listLine.Split(';').ToList();
和foreach(String item in listItems
正在做什么:)
答案 3 :(得分:0)
foreach(String item in listItems)
{
if (item == "\"")
{
item2 = item.Replace("\"", "");
}
else
{
item2 = item;
}
}
答案 4 :(得分:0)
您是否尝试过替换"
引号? item.Replace(""", "");
没有做任何事情,因为子串"
没有出现。
替换
if (item == """)
{
item2 = item.Replace(""", "");
}
else
{
item2 = item;
}
代替item.Replace("\"", "")
。
答案 5 :(得分:0)
尝试查找并替换chr代码而不是转义序列。
我相信你想要chr(34)
答案 6 :(得分:0)
一些LINQ怎么样?
var lines = File.ReadLines("file.csv")
.Select(line => string.Join("", line.Select(c => c != '"')));
答案 7 :(得分:0)
我们对于输出这种格式的第三方库也遇到了同样的问题。当字段嵌入引号字符时,会发生棘手的部分。为避免这种情况,下面的代码确保字段分隔符与之相邻(或行的开头/结尾)。如果将字段分隔符嵌入到字段的开头或结尾,则将实现此实现。
private void FileStripDoubleQuotedFields(string csvPath, string fieldSeparator)
{
// Input file: "asdf" "bfdsa" "fdsa"
// Output file: asdf bfdsa fdsa
string stripped = csvPath.Replace(".", "_stripped.");
using (StreamReader reader = new StreamReader(csvPath))
using (StreamWriter writer = new StreamWriter(stripped, true, reader.CurrentEncoding))
{
string line;
while ((line = reader.ReadLine()) != null)
{
string newLine = line
.RegexReplace("^\"", "") // begin of line
.RegexReplace("\"" + fieldSeparator + "\"", fieldSeparator) // between fields
.RegexReplace("\"" + fieldSeparator, fieldSeparator) // field followed by empty field(s)
.RegexReplace(fieldSeparator + "\"", fieldSeparator) // empty field(s) followed by field
.RegexReplace("\"$", ""); // ending quote
writer.WriteLine(newLine);
}
}
string orgPath = csvPath.Replace(".", "_spire.");
File.Move(csvPath, orgPath);
File.Move(stripped, csvPath);
File.Delete(orgPath); // breakpoint here to compare before the delete
}
public static string RegexReplace(
this string input,
string pattern,
string replacement,
RegexOptions options = RegexOptions.None)
{
return Regex.Replace(input, pattern, replacement, options);
}