2014-11-03 143 views
2

我被转换一个字符串数组,一个整数数组

string[] code = System.IO.File.ReadAllLines(@"C:\randoms\randnum.txt"); 

然后我placethis成读取使用C#.NET V3.5表达2010在格式

18 11 2 18 3 14 1 0 1 3 22 15 0 6 8 23 18 1 3 4 10 15 24 17 17 16 18 10 17 18 23 17 11 19 

含整数的文本文件一个字符串由

string s1 = Convert.ToString(code); 

而且需要能够将它读入int数组进行一些数学处理。

我用尽了一切建议在本网站下关于这个主题的其他职位,包括分析和隐蔽阵列,但一旦我尝试这个,我得到了可怕的“输入字符串是不正确的格式”消息

+0

你为什么要将字符串[]再次转换为字符串? – dotctor 2014-11-03 23:53:19

+0

你将不得不将每个单值转换为整数 – Icepickle 2014-11-03 23:53:24

回答

1
var intArray = File.ReadAllText(@"C:\randoms\randnum.txt") 
     .Split((char[]) null, StringSplitOptions.RemoveEmptyEntries) 
     .Select(int.Parse).ToArray(); 
+0

任何投票的理由? – dotctor 2014-11-04 00:21:15

+1

我没有意识到Split()以null方式工作。我喜欢这个解决方案,因为它假定每个整数之间有任意数量的空白。 – 2014-11-04 00:34:49

+0

工作出色。谢谢 – 2014-11-04 20:49:48

-1

乍一看,问题在于你用ReadAllLines来读数。这将返回一个字符串数组,其中每个字符串表示文件中的一行。在你的例子中,你的数字看起来都在一行上。您可以使用System.IO.File.ReadAllText来获取单个字符串。然后使用.Split(new char[]{}, StringSplitOptions.RemoveEmptyEntries);获取您要查找的字符串数组。

string allTheText = System.IO.File.ReadAllText(@"C:\randoms\randnum.txt"); 
string[] numbers = allTheText.Split(new char[]{}, StringSplitOptions.RemoveEmptyEntries); 
2

你可以使用LINQ:

var ints = code.SelectMany(s => s.Split(' ')).Select(int.Parse).ToList(); 

这将需要你的空间分隔的数字列表,并将其压扁成整数

+0

不幸的是,第一次尝试了这个结果。 – 2014-11-04 20:56:41

1

一些这些答案都是伟大的一维列表,但如果您的文件包含任何不能转换为int的字符串,则int.Parse()将引发异常。

虽然稍贵,但可以考虑做一个TryParse。这给你一些例外处理:

int tmp = 0; // Used to hold the int if TryParse succeeds 

int[] intsFromFile = 
    File.ReadAllText(@"C:\randoms\randnum.txt") 
     .Split(null) 
     .Where(i => int.TryParse(i, out tmp)) 
     .Select(i => tmp) 
     .ToArray(); 
+0

OP说:“我正在阅读使用C#.Net v3.5 express 2010 **的文本文件,其中包含整数**,格式为” – dotctor 2014-11-04 00:25:31

+0

“如果文件包含任何分隔符字符(如'\ t'或'\ n'),该怎么办?那么你会放弃一些数字。“文件并非总是与您期望的格式完全一样” – dotctor 2014-11-04 00:32:28

+0

我的意思是,如果“文件不总是与您期望的文件格式完全一致”,则不应指望数字仅由空格字符分隔 – dotctor 2014-11-04 00:36:52

0

这是一个单线,真的。这会给你一个整数的一维数组在文件中:

private static rxInteger rxInteger = new Regex(@"-?\d+") ; 

... 

int[] myIntegers1 = rxInteger 
        .Matches(File.ReadAllText(@"C:\foo\bar\bazbat")) 
        .Cast<Match>() 
        .Select(m => int.Parse(m.Value)) 
        .ToArray() 
        ; 

如果你希望它是一个2维衣衫褴褛阵列,这不是要复杂得多:

int[][] myIntegers2 = File 
         .ReadAllLines(@"C:\foo\bar\bazbat") 
         .Select(s => 
         rxInteger 
         .Matches(s) 
         .Cast<Match>() 
         .Select(m => int.Parse(m.Value)) 
         .ToArray() 
        ) 
         .ToArray() 
         ; 

[实施验证和错误处理留给读者练习]

相关问题