我有一份质谱(化学)的档案。在该文件中,每个轴有两个不同的值,如x和y。但它们都在同一行。那么如何把它们分开。150-2000 m/z,123,53,54,23,35,56,68,89,90等,我知道我可以用逗号将这些值分隔成列,但是如何将值150-2000改为数字,并将像150 151 153这样的单独列。。。。。1999 -2000年
事先鸣谢
从CSV文件的一行中有两个不同的值集,我想将它们分隔成不同的列。其中一个文件在150-2000的范围内,所以如何把它转换成简单的数字。
发布于 2022-11-23 16:16:44
可以在Convert
中使用ClassMap
将第一列转换为x
和y
值。
void Main()
{
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
HasHeaderRecord = false
};
using (var reader = new StringReader("150-2000 m/z,123"))
using (var csv = new CsvReader(reader, config))
{
csv.Context.RegisterClassMap<FooMap>();
var records = csv.GetRecords<Foo>().Dump();
}
}
// You can define other methods, fields, classes and namespaces here
public class FooMap : ClassMap<Foo>
{
FooMap()
{
Map(m => m.X).Convert(args =>
{
var value = args.Row.GetField(0);
var beforeDash = value.Split("-")[0];
var canParse = int.TryParse(beforeDash, out int result);
if (canParse)
{
return result;
}
else
{
return 0;
}
});
Map(m => m.Y).Convert(args =>
{
var value = args.Row.GetField(0);
var afterDash = value.Split("-")[1];
var beforeSpace = afterDash.Split(" ")[0];
var canParse = int.TryParse(beforeSpace, out int result);
if (canParse)
{
return result;
}
else
{
return 0;
}
});
Map(m => m.AnotherNumber).Index(1);
}
}
public class Foo
{
public int X { get; set; }
public int Y { get; set; }
public int AnotherNumber { get; set; }
}
https://stackoverflow.com/questions/74545899
复制相似问题