合併多個 txt 或 csv 文件此腳本會將多個 txt 或 csv 檔案合併為一個檔案。 該腳本請求目標目錄,打開第一個文件,然後使用表連接函數迭代地將後續文件新增至第一個文件。最終文件中將建立一個新列:該列將包含每一行所來自的文件的名稱。 如果所有文字檔案具有相同(相同)的列名稱,則這些列將全部堆疊(連接)在一列中。 唯一的列也將被轉移到最終文件中。
這個腳本有幾個被註解掉的部分,腳本的這些部分可用於組合多個 Excel 檔案。 合併 Excel 檔案時,假設這些 .xls 或 .xlsx 檔案只有一個工作表。
--------更新於2016年6月1日
我對這個腳本有一個有趣的問題。 有人有一堆 CSV 文件,其中列名稱位於第二行,更糟的是,列名稱以分號分隔,而文字以逗號分隔。處理此問題的一種方法是將導入設定新增至腳本。這是我很高興 JMP 為我撰寫的內容之一。我手動打開並導入該文件(使用“文件”>“打開”>“打開並預覽”),然後在對話框中將列設置為從第二行開始,並添加“;”的“其他”分隔符。導入文件後,我轉到來源腳本並找到“導入設定”參數。
為了使腳本打開此文件,我添加了一個表達式 importset=expr(import settings(...在此處貼上腳本...));靠近腳本頂部的位置。 (它是一個表達式,因為在我稍後打開文件時需要它們之前,評估導入設定是沒有用的。)
然後在底部附近,我將表達式新增到 open 參數 open(filename,importset)。
重要提示:如果您要使用匯入過濾器下載第二個腳本,並希望它能夠自動處理格式不常見的 CSV 表。它只是行不通,您必須創建自己的導入設定並將它們替換為此處的設定和範例。
--------不久前還有一個關於如何在 MAC 上運行此功能的問題。
我添加了另一位,以便它也可以在 Mac 上運行(這意味著我沒有在 PC 上測試它)
If( Host is( Mac ),
filepath="/"||prefilepath,
filepath = Convert File Path( prefilepath, Windows )
);
-----2016 年 10 月 10 日更新
Justin C 注意到帶有多個「.」的檔案名稱效果不太好,並建議將「item」更改為 -1,以便使用檔案副檔名而不是第二個項目作為檔案副檔名。 很好的修復,也是處理檔案名稱時要記住的重要想法。 謝謝賈斯汀!
公用事業回覆:合併多個 txt 或 csv 文件我發現在我的例子中,列並不總是正確連接。有人可以幫忙嗎?
我有一堆文件想要連接,但列順序偶爾會發生變化,如下所示:
文件1-3
列順序(A、B、C、D、E、F、G)
文件 4-100
列順序(A、B、C、D、E、 H ,F,G)
文件 101-1000
列順序(A、B、C、 K ,D,E, H ,F,G,我, J )
我想合併所有這些文件,並確保每列的資料始終位於最終表中的相應列中。我還想保留所有資料(不要刪除 K 列,只需將 K 列不存在的所有行保留為空白)。任何幫助將不勝感激!
回覆:合併多個 txt 或 csv 文件有沒有辦法在此腳本中新增標頭?我有大約 20,000 個包含沒有標題資料的文件
回覆:合併多個 txt 或 csv 文件你好,
我是 JMP 腳本編寫的新手。 由於某種原因,當我合併多個文字檔案時,導入設定對我不起作用。 我可以看到串聯文件。 在我的例子中,列名從 11 開始,資料從 12 開始。 但合併文件從第 1 列開始,而不是從第 11 列開始。 請告訴我我錯過了什麼?
謝謝
回覆:合併多個 txt 或 csv 文件我為此創建了一個解決方法,其中涉及將檔案複製到臨時目錄並重命名它們。 我看不到任何附加文件的方法,所以這是程式碼
names default to here (1);
Clear Symbols();
//Import settings, sometimes CSV files aren't exaclty formatted as CSV. Add import settings
//This is an expression to use later in the Open argument.
//Column names start on the second row, and are semicolon delimited
importset=expr( Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Comma, Other( ";" ), CSV( 0 ) ),//use ";" as a delimiter too
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 2 ),//starting on second row
Data Starts( 3 ),//data starts on 3rd row
Lines To Read( "All" ),
Year Rule( "20xx" )
));
//set up variables with starting values
filelist={}; //empty list
//launch dialog to get the file location
prefilepath = munger(Pick Directory( "Browse to the Directory of the .txt / .csv files " ),1,"/","");
If( Host is( Mac ),
filepath="/"||prefilepath,
filepath = Convert File Path( prefilepath, Windows )
);
prefilelist = Files In Directory( filepath );
n2=nitems(prefilelist);
//filter out any non-txt or csv files
For( i2 = 1, n2 >= i2, i2++,
file=(prefilelist[i2]);
If( Item( 2, prefilelist[i2], "." ) == "txt" | Item( 2, prefilelist[i2], "." ) == "csv",
Insert Into( filelist,file),
show(file)
)
);<BR />
nf=nitems(filelist); //number of items in the working list
tempDir = "$TEMP\JMP\";
Create Directory(tempDir); //create the temp folder in the "%temp%" windows directory
//for each .csv file found on the server
For( i3 = 1 , i3 <= nf, i3++,
copyFileName = filelist[i3];
csvPos = Contains(filelist[i3],".csv"); //determine where in the filename .csv is
newFileName = Left(copyFileName, csvPos + 3 ); //determine the filename without the extra bits after .csv
Copy File (filepath||filelist[i3], tempDir||copyFileName);//copy the file to the temp folder
Rename File (tempDir||copyFileName, newFileName);//rename the file without the extra bits after .csv
filelist[i3] = newFileName; //replace the reference in the array to this file
);//end of the for loop
cctable= New Table( "Combined data table ");//make an empty table
cctable<<NEW column=""></NEW>回覆:合併多個 txt 或 csv 文件我在運行它時遇到了一些麻煩。我認為問題是我使用的文件本質上是逗號分隔的文字文件,但具有 .log 副檔名。
我將 txt 更改為您程式碼中的日誌:
Item( -1, prefilelist[i2], "." ) == "日誌"
我收到一個錯誤
Send 在存取或評估 'Send' 時期望可編寫腳本的對象,dt << /*###*/Run Formulas() /*###*/
在:
dt<< 運算公式();
如果我將檔案的副檔名更改為 .txt,它就可以工作。然而,我有數千個文件想要合併,每天都會添加數十個文件。 有沒有辦法讓它與具有 .log 副檔名的檔案一起使用?
第二個問題。
我的文件中沒有標題。有沒有辦法合併文件然後將標題新增到資料表中?目前,它採用第一個文件的頂行並將其作為標題,即所有資料。
謝謝你的幫忙。
回覆:合併多個 txt 或 csv 文件只是想說謝謝拜倫。 這是一個很好且實際的例子。
這個腳本節省了我很多時間!
該腳本在幾秒鐘內完成了我花費數小時工作的事情。
謝謝你!!!
回覆:合併多個 txt 或 csv 文件<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />同樣的方法也適用於「join」。 只需嘗試用 join 參數取代 concat 參數即可。(手動執行連接,然後複製結果表中的來源腳本,以取得連接參數的範例
回覆:合併多個 txt 或 csv 文件有沒有簡單的方法可以使用 JOIN 並排組合多個 txt 或 csv 文件,而不是垂直組合連接在合併txt Tables.jsl ?
回覆:合併多個 txt 或 csv 文件嗨拜倫,這個腳本效果很好。 我稍微修改了一下,從打開的文件中選擇資料的子集,添加列,將字元更改為數字等。我有一個問題,是否有一種簡單的方法來修改腳本以指定文件所在的資料夾彈出提示?
謝謝
TS
回覆:合併多個 txt 或 csv 文件該腳本無法在我的系統上運行:Mac OS X 10.10.5 + JMP Pro 12.1.0
回覆:合併多個 txt 或 csv 文件是的,負引用很方便,它適用於幾乎所有引用字元位置的函數,以及某些您可能意想不到的地方;例如,想像一下有 -1 位小數。
回覆:合併多個 txt 或 csv 文件嗨,布萊恩和大家,
我能夠添加一個小更新:從來源列名稱中刪除 .csv 或 .txt 等尾隨檔案副檔名:
所以在最後一節而不是:
設定每個值(filenow)
我補充道:
設定每個值(刪除(filenow,-4,-1))
我很驚訝負面參考竟然起作用了!
回覆:合併多個 txt 或 csv 文件嗨拜倫,
不錯的腳本,在 JMP 12 中就像魅力一樣。 想知道一種從特定行開始讀取來源資料檔案的好方法,如果願意的話,可以截斷標題資訊。例如,如果所有原始檔案格式都相同,則從以“CH”一詞開頭的行開始?
回覆:合併多個 txt 或 csv 文件你好拜倫,
它只發生在這個腳本中。 運行腳本後,它在日誌視窗中顯示“NItem()”空白錯誤。 所以我只需複製整個腳本並將其貼到新的腳本視窗中,然後它就可以正常運行了。
謝謝
回覆:合併多個 txt 或 csv 文件我不確定我是否理解這個問題。 其他腳本是否會複製此行為?
回覆:合併多個 txt 或 csv 文件嗨拜倫,
感謝您提供這個有價值的腳本。 我正在使用此腳本添加多個 .txt 檔案。 但它是在將相同的腳本複製到新腳本後運行的。 我想問為什麼在第一次嘗試打開相同的腳本時它沒有運行。 感謝您提前的答覆。 這個腳本非常有幫助。
回覆:合併多個 txt 或 csv 文件肖恩,
在 MAC 上,選擇目錄或選擇檔案的對話方塊視窗是相同的。 該腳本要求您識別包含 csv 和/或 txt 檔案的目錄。 該腳本目前允許連接檔案清單中的 csv 和 txt 檔案。 如果您希望它更具限制性,那麼只需編輯您希望從腳本的這一部分中排除的文件類型即可。
//filter out any non-txt or csv files
For( i2 = 1, n2 >= i2, i2++,
file=(prefilelist[i2]);
If( Item( 2, prefilelist[i2], "." ) == "txt" | Item( 2, prefilelist[i2], "." ) == "csv",
Insert Into( filelist,file),
show(file)
)
);
如果腳本傳回所選目錄中的檔案副檔名列表,然後讓使用者檢查要新增到 filelist 變數的檔案類型,那就太酷了。
如果您有時間編寫一些腳本,請發布升級後的腳本!
此致,
拜倫
回覆:合併多個 txt 或 csv 文件布萊恩,
我在 OS X 10.10.2 上使用 JMP 10.0.0。 當我運行用於選擇文件的腳本時,將會啟動一個視窗。 但是,我無法在啟動的視窗中選擇任何 .txt 或 .csv 檔案。 我不確定該腳本是否需要針對 JMP(OS X 版本)進一步修改。 你能幫忙解決這個問題嗎? 謝謝。
肖恩
回覆:合併多個 txt 或 csv 文件謝謝,我現在明白了。
回覆:合併多個 txt 或 csv 文件戴爾,
您介意再檢查一下配件嗎?
我重新附上它。
——拜倫
回覆:合併多個 txt 或 csv 文件腳本在哪裡?我似乎無法在任何地方找到它。