【问题标题】:Importing a non delimiter text file into matlab将非分隔符文本文件导入matlab
【发布时间】:2013-12-15 05:13:32
【问题描述】:

我有一个问题:我已经下载了 1 个降雨数据 int 文本文件 *.txt 它包括文本、标题、底部文本和数据以及数据之间的一些空格线。 当我将文件导入 Matlab 时,matlab 无法定义每个单元格包括列和行(非分隔符)

我确实喜欢,将文本文件转换为 Excel,并非常轻松地删除列和行并与其他文件一起保存。但我的数据多达 846000 个数据集 ~ 24h x 30days x 12month x 20 年,每个数据组合了许多不同的文件。所以很难像我一样进行手动转换。 我的顾问告诉我,有 Matlab CODE 可以做得很好。有谁可以帮我解决这个问题?

原文:https://drive.google.com/file/d/0By5tEg03EXCpekNaemItMF85ZWs/edit?usp=sharing

【问题讨论】:

    标签: matlab


    【解决方案1】:

    如果您使用的是 Mac 或 Linux,我建议您使用 shell 将这些数据文件转换为 Matlab 喜欢的格式,而不是试图让 Matlab 去做。这也适用于 Windows,但前提是您安装了类似 unix 的 shell,例如 MinGW、Cygwin 或 Git Bash。

    例如,这会将您共享的文件的原始数据部分转换为 CSV:

    cat "$file" | sed 's:  *:,:g' | sed 's:^,::' | grep '^[0-9]' > "$file".csv
    

    然后您可以遍历所有原始数据文件并将它们组合成一个 CSV,如下所示:

    for file in *.txt; do
      cat "$file" | sed 's:  *:,:g' | sed 's:^,::' | grep '^[0-9]' >> all.csv
    done
    

    如果您需要保存,例如,哪一年和哪个气象站,您可以稍微花点心思,在每个文件的开头捕获这些值,并将它们转换成每一行的列。这是一个获取年份和气象站 ID 并将其作为列插入到每一天之前的示例。

    for file in *.txt; do
      station="$(grep 'Station -' "$file" | sed 's: *Station - ::' | sed 's:   .*::' | uniq)"
      year="$(grep 'Water Year' "$file" | awk '{print $4}')"
      cat "$file" | sed 's:  *:,:g' | grep '^,[0-9]' |\
        sed "s/^,/$station,$year,/" >> all.csv
    done
    

    【讨论】:

    • 非常感谢您的回答。我使用的是windows 7系统。我想在matlab窗口中有一个命令代码,当输入时,一切都会完成,因为程序会自动将文本文件导入matlab并将其转换为单元格,然后将其写入新的excel或带有分隔符格式的文本文件.谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多