将数组拆分为 2 部分
本文关键字:部分 拆分 数组 | 更新日期: 2023-09-27 18:35:09
我正在尝试读取以下格式的日志文件:
date | cost
date | cost
..ect
使用以下代码将文件读入数组:
string[] lines = File.ReadAllLines("log.txt");
我的问题是如何将数组切成每行 2 个部分,以便将它们添加到 2 列的列表视图中?我在想也许字典会是一个好的开始。
假设这是 C# 而不是 C,以下内容可能会满足您的需求:
public class LogEntry{
public string Date;
public string Cost;
public LogEntry(string date,string cost){
Date=date;
Cost=cost;
}
}
...
// Grab the lines from the file:
string[] lines = File.ReadAllLines("log.txt");
// Create our output set:
LogEntry[] logEntries=new LogEntry[lines.Length];
// For each line in the file:
for(int i=0;i<lines.Length;i++){
// Split the line:
string[] linePieces=lines[i].Split('|');
// Safety check - make sure this is a line we want:
if(linePieces.Length!=2){
// No thanks!
continue;
}
// Create the entry:
logEntries[i]=new LogEntry( linePieces[0] , linePieces[1] );
}
// Do something with logEntries.
请注意,此类处理只能使用相对较小的日志文件来完成。File.ReadAllLines("log.txt")对于大文件变得非常低效,此时使用原始FileStream更合适。
var lines = File.ReadAllLines("log.txt").Select(l=> l.Split('|'));
var dictionary= lines.ToDictionary(x => x[0], y => y[1]);
使用 2D 数组并string.Split('-')
string[] lines = File.ReadAllLines("log.txt");
//Create an array with lines.Length rows and 2 columns
string[,] table = new string[lines.Length,2];
for (int i = 0; i < lines.Length; i++)
{
//Split the line in 2 with the | character
string[] parts = lines[i].Split('|');
//Store them in the array, trimming the spaces off
table[i,0] = parts[0].Trim();
table[i,1] = parts[1].Trim();
}
现在你将有一个如下所示的数组:
table[date, cost]
您可以使用字典,因此只需查找日期即可对其进行改进。编辑:正如@Damith所做的那样
此外,使用 LINQ,您可以将其简化为:
var table = File.ReadAllLines("log.txt").Select(s => s.Split('|')).ToDictionary(k => k[0].TrimEnd(' '), v => v[1].TrimStart(' '));
现在,您可以使用以下命令轻松地从 LINQ 表达式中获取结果:
foreach (KeyValuePair<string, string> kv in table)
{
Console.WriteLine("Key: " + kv.Key + " Value: " + kv.Value);
}
另请注意,如果您不需要文件中的空格,则可以省略Trim()
仅仅因为这篇文章最初被标记为 C :)
下面是一个 C 示例:
使用如下所示的数据文件(我称之为 temp.txt):
3/13/56 | 13.34
3/14/56 | 14.14
3/15/56 | 15.00
3/16/56 | 16.56
3/17/56 | 17.87
3/18/56 | 18.34
3/19/56 | 19.31
3/20/56 | 20.01
3/21/56 | 21.00
此代码将读取它,将其解析为单个 2 dim 字符串数组,char col[2][80][20];
#include <ansi_c.h>
int main()
{
int i;
char *buf;
char line[260];
char col[2][80][20];
FILE *fp;
fp = fopen("c:''dev''play''temp.txt", "r");
i=-1;
while(fgets(line, 260, fp))
{
i++;
buf = strtok(line, "|");
if(buf) strcpy(col[0][i], buf);
buf = strtok(NULL, "|");
if(buf) strcpy(col[1][i], buf);
}
fclose(fp);
return 0;
}