我正在使用C#.Net v3.5 express 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[] code = System.IO.File.ReadAllLines(@"C:\randoms\randnum.txt");
然后我把它放到一个字符串中
string s1 = Convert.ToString(code);
并且需要能够将其读入int数组以进行一些数学处理。
我已尝试过本网站上其他帖子中提出的所有内容,包括解析和隐藏数组但是一旦我尝试了这个,我就会得到可怕的"输入字符串格式不正确&#34 ;消息
答案 0 :(得分:2)
var intArray = File.ReadAllText(@"C:\randoms\randnum.txt")
.Split((char[]) null, StringSplitOptions.RemoveEmptyEntries)
.Select(int.Parse).ToArray();
答案 1 :(得分:2)
你可以使用LINQ:
var ints = code.SelectMany(s => s.Split(' ')).Select(int.Parse).ToList();
这将获取以空格分隔的数字列表并将它们展平为一维的整体列表
答案 2 :(得分:2)
其中一些答案很棒,但如果您的文件包含任何无法转换为int的字符串,int.Parse()
将抛出异常。
虽然稍贵一些,但考虑改为使用TryParse。这为您提供了一些异常处理:
int tmp = 0; // Used to hold the int if TryParse succeeds
int[] intsFromFile = System.IO.File
.ReadAllText(@"C:\randoms\randnum.txt")
.Split(null)
.Where(i => int.TryParse(i, out tmp))
.Select(i => tmp)
.ToArray();
答案 3 :(得分: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()
;
如果你想让它成为一个二维的粗糙阵列,它就不那么复杂了:
int[][] myIntegers2 = File
.ReadAllLines( @"C:\foo\bar\bazbat" )
.Select( s =>
rxInteger
.Matches(s)
.Cast<Match>()
.Select( m => int.Parse(m.Value) )
.ToArray()
)
.ToArray()
;
[验证和错误处理的实现留给读者练习]
答案 4 :(得分:-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);