Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用C解析从GoogleInsights下载的CSV#_C#_Asp.net_Csv - Fatal编程技术网

C# 如何使用C解析从GoogleInsights下载的CSV#

C# 如何使用C解析从GoogleInsights下载的CSV#,c#,asp.net,csv,C#,Asp.net,Csv,我正在从GoogleInsights下载一个CSV,我需要解析某些信息,并使用这些数据填充热图 谷歌没有用于洞察的开放API,所以你只能下载CSV然后解析出来 下载了大量数据,但我需要的数据从第61行开始,然后继续下载大约40行,数据如下所示: ... ... above data .... Top subregions for test Subregion test New York 100 Ohio 79 Kentucky 72 Maine 66 New Jer

我正在从GoogleInsights下载一个CSV,我需要解析某些信息,并使用这些数据填充热图

谷歌没有用于洞察的开放API,所以你只能下载CSV然后解析出来

下载了大量数据,但我需要的数据从第61行开始,然后继续下载大约40行,数据如下所示:

...
...  above data
....
Top subregions for test 
Subregion   test
New York    100
Ohio    79
Kentucky    72
Maine   66
New Jersey  64
District of Columbia    58
Pennsylvania    58
Delaware    58
Maryland    57
Massachusetts   52

Dictionary<string, int> data = new Dictionary<string,int>();
string line = null;
while ((line = ReadLine()) != null) /*ReadLine() is what you currently use to read next line from your input*/
{
 string[] items = line.Split(new char[]{' ', '\t'}, StringSplitOptions.RemoveEmptyEntries);
 string state= items[0].
 int count = int.Parse(items[1]);
 data.Add(state, count);
}
我能够加载CSV—我只是不确定如何正确解析特定数据。我在CSV中循环,直到找到“subsection”文本——但在那之后,我不知道如何将状态输入某种字典

任何帮助都将不胜感激


谢谢

我强烈建议你调查一下。另外,请参阅右侧的“相关”问题。

您在上面粘贴的内容看起来不像CSV格式,例如,逗号在哪里?对于CSV解析,在stackoverflow上搜索CSV正则表达式,有一些非常好的建议。 但是,如果您的数据看起来像是粘贴在上面的(它由空格和/或制表符分隔,而不是逗号),如果您只想在数据上迭代并填充字典,则可以执行以下操作:

...
...  above data
....
Top subregions for test 
Subregion   test
New York    100
Ohio    79
Kentucky    72
Maine   66
New Jersey  64
District of Columbia    58
Pennsylvania    58
Delaware    58
Maryland    57
Massachusetts   52

Dictionary<string, int> data = new Dictionary<string,int>();
string line = null;
while ((line = ReadLine()) != null) /*ReadLine() is what you currently use to read next line from your input*/
{
 string[] items = line.Split(new char[]{' ', '\t'}, StringSplitOptions.RemoveEmptyEntries);
 string state= items[0].
 int count = int.Parse(items[1]);
 data.Add(state, count);
}

字典数据=新字典();
字符串行=null;
而((line=ReadLine())!=null)/*ReadLine()是当前用于从输入中读取下一行的内容*/
{
string[]items=line.Split(新字符[]{'','\t'},StringSplitOptions.RemoveEmptyEntries);
字符串状态=项[0]。
int count=int.Parse(项[1]);
数据。添加(状态、计数);
}
课程计划
{
静态void Main()
{
foreach(GetRegions中的var项(“google_insights.txt”))
{
WriteLine(“Count={0},Name={1}”,item.Value,item.Key);
}
}
私有静态正则表达式_regionRegex=新正则表达式(
@“^(?。+)\s(?[0-9]+)$”,
RegexOptions.Compiled
);
静态IEnumerable GetRegions(字符串文件名)
{
使用(var file=file.OpenRead(文件名))
使用(var reader=newstreamreader(文件))
{
弦线;
布尔=假;
而((line=reader.ReadLine())!=null)
{
if(ying&&string.IsNullOrWhiteSpace(line))//IsNullOrEmpty也可以工作
{
屈服断裂;
}
如果(屈服)
{
var match=_regionRegex.match(行);
如果(匹配成功)
{
var count=int.Parse(match.Groups[“count”].Value);
var name=match.Groups[“name”].Value;
返回新的KeyValuePair(名称、计数);
}
}
if(第行包含(“子区域”))
{
屈服=真;
}
}
}
}
}

这也是问题的一部分。谷歌称之为CSV,但它不是哥们,你太棒了。我假设String.IsNullOrWhiteSpaces与String.IsNullOrEmpty相同?@Jack Marchetti,不,它不一样,否则它就不存在:-)
IsNullOrWhiteSpaces
是在.NET 4.0中引入的,除了检查null和空字符串外,它还检查字符串是否只包含空格字符。如果未使用.NET 4.0,则可以执行以下测试:
If(string.IsNullOrEmpty((line??string.Empty).Trim())
gotcha。我认为它仍然有效。我注意到你用“计数”作为你的钥匙,而不是状态。“我改变了主意。”杰克·马切蒂,哦,是的,当然。如果将计数用作键,我的实现将不适用于哈希表:-)请随意编辑我的答案并提供您的备选方案。