【问题标题】:Copying data from 900 different subsubfolders into an array将 900 个不同子文件夹中的数据复制到数组中
【发布时间】:2015-04-03 19:56:48
【问题描述】:

我是处理大量数据的新手,我认为这里有人可以提供帮助。结构如下:

我有 1 个名为“100”的父文件夹 在这个父文件夹中,我有 10 个子文件夹,标记为 PKA1、PKA2 等,直到 PKA10。

在其中的每一个中,我都有 30 个相对于初始父文件夹的子目录:

1eV、2eV、3eV、高达 30eV

在每个文件夹中,我都有一个名为 PKA.dump 的文件。

我想复制每个 PKA.dump 文件夹的第 20 行并转储到一个数组中以便于处理。我怀疑这样的壮举是否可能,对我来说似乎很复杂。我加入只是为了问这个问题。我想这里的人会是解决这个问题的最佳主意。

我希望最终得到 30 个数组,每个数组包含 30 行不同的数据

编辑:这是我对代码的尝试:我尝试编辑以满足我的需要。如何指定第 20 行?

find foo -type f -name PKA.dump |
while read file; do
    line=$(echo $file | sed 's/.*PKA.dump\([0-9]*\)$/\1/')
    sed -n -e "$line {p; q}" $file
done

【问题讨论】:

  • 对不起,从反对票来看,我猜是做不到的。抱歉问了一个愚蠢的问题。
  • 绝对有可能。但是 SO 不是编写代码的地方。我们的想法是让您尝试,当您遇到问题时我们会帮助您...
  • 你可能不会在这里得到一个完整的答案,因为你没有展示多少自己的作品,而且你没有被困在任何地方——你根本就没有开始。问题很简单。选择一种编程语言(您没有指定任何语言!),然后将问题分成小的子问题。了解如何读取文件。了解如何只阅读第 20 行。了解如何为 30 个目录执行此操作。了解如何为 10 个目录执行此操作。基本上,这很容易,一次只解决一个问题,一旦你有了它,就将你的解决方案包装在另一层中。
  • 有人能推荐一种最适合此类问题的编程语言吗?
  • 为什么说它找不到 PKA.dump,即使我只运行 find 命令,它找到了所有 30 个?查找 PKA1 -type f -name PKA.dump | sed -n '20p' PKA.dump

标签: arrays


【解决方案1】:

这是一个 Powershell 脚本,可以满足您的需要:

Get-ChildItem PKA.dump -r | Sort-Object $_ | ForEach-Object { Get-Content $_ | Select -Index 19 } > output.txt

output.txt 文件应包含运行脚本的目录结构中每个名为 PKA.dump 的文件的第 20 行。

另外,这是一个简单的 C# 示例:

List<string> data = new List<string>();

foreach (string filePath in Directory.EnumerateFiles(@"C:\100", "PKA.dump", SearchOption.AllDirectories))
{
    string[] lines = File.ReadAllLines(filePath);
    data.Add(lines[19]); // zero based index for 20th line
}

string[] endResult = data.ToArray();

【讨论】:

  • 我以前从未使用过 c#。我将如何编译这个?
  • @Jack:对于快速开发测试,您可以使用dotnetfiddle.net 之类的东西。如果你真的想做开发,你可能想下载一个像 Visual Studio 这样的 IDE。但是我怀疑您只是想在本地计算机上执行此操作以一次解决问题,对吗?如果是这样,如果你运行的是 Windows,你可以在 PowerShell 中编写类似这样的脚本。
  • 我以后也需要这样做。如果我下载visual studio并将csharp文件放在100父目录并执行,这段代码会照原样工作吗?
  • @Jack:学习像 Visual Studio 这样的 IDE 本身就是一种练习。听起来您只需要这个解决方案,而不是软件开发作为一种技能。我看看Powershell,或许stackoverflow.com/a/14759794/3507333stackoverflow.com/a/18848848/3507333可以帮你解决问题。
  • 效果很好!现在唯一的问题是它没有按顺序显示它们。我希望结果按 1eV、2eV 等顺序排列。也可以这样做吗?
【解决方案2】:

考虑到您正在尝试使用 java 编程语言来解决。

为了对大量数据执行读取和写入/复制操作,请借助 java.nio 包类,这些类基本上是为处理大量数据而设计的。

使用 List/Queue 存储从 PKA.dump 复制的行。不需要创建那么多数组。

步骤:

  1. 使用 java.nio 包类读取文件内容

  2. 将文件内容写入合适的数据结构,例如列表/队列

  3. 继续您的最终处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 2020-06-22
    • 2022-11-17
    • 1970-01-01
    相关资源
    最近更新 更多