Removing the top rows of a csv file

20 views (last 30 days)
I have a folder with multiple .csv files, similar to the one attached here. I am trying to remove the top rows of this csv file (everything until the row with Time and Trace). I need a script to run through the folder, delete all the top row portion of the files and resave them. Could you please help me with that? Thank you.
  1 Comment
Harsimran Singh
Harsimran Singh on 3 May 2021
use this link, it works perfectly for me:
Option Explicit
Sub FixCsvFiles()
Dim SelectFolder As String
Dim csvFiles As Variant
Dim csvWb As Workbook
Dim x As Integer
'browse for folder with csv files
On Error GoTo FixCsvFiles_Error
SelectFolder = GetFolder("c:\")
Application.ScreenUpdating = False
'Check user did not cancel folder selection
If SelectFolder = "" Then
MsgBox "No Folder Selected - Cannot continue", vbCritical
End
End If
SelectFolder = SelectFolder & "\"
csvFiles = Dir(SelectFolder & "*.csv")
Do While csvFiles <> ""
Set csvWb = Workbooks.Open(SelectFolder & csvFiles)
Rows("1:2").Delete
x = x + 1
csvWb.Close True
csvFiles = Dir
Loop
Application.ScreenUpdating = True
MsgBox "A total of " & CStr(x) & " files processed", vbInformation
On Error GoTo 0
Exit Sub
FixCsvFiles_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure FixCsvFiles of Module2"
End Sub
Function GetFolder(strPath As String) As String
Dim fldr As FileDialog
Dim sItem As String
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
.Title = "BROWSE TO FOLDER LOCATION WITH CSV FILES"
.AllowMultiSelect = False
.InitialFileName = strPath
If .Show <> -1 Then GoTo NextCode
sItem = .SelectedItems(1)
End With
NextCode:
GetFolder = sItem
Set fldr = Nothing
End Function

Sign in to comment.

Accepted Answer

Jan
Jan on 18 Feb 2021
Edited: Jan on 25 Feb 2021
Folder = 'D:\Your\Folder';
FileList = dir(fullfile(Folder, '*.csv'));
for iFile = 1:numel(FileList)
File = fullfile(Folder, FileList(iFile).name);
% Read the file:
FID = fopen(File, 'r');
if FID < 0
error('Cannot open file: %s', File);
end
C = fread(FID, [1, inf], '*char'); % [EDITED] inf -> [1, inf]
fclose(FID);
index = strfind(C, 'Time (s)');
if numel(index) ~= 1
error('Key not found in file: %s', File);
end
% Write cropped contents:
FID = fopen(File, 'w');
if FID < 0
error('Cannot open file: %s', File);
end
fwrite(FID, C(index:numel(C)), '*char');
fclose(FID);
end
Create a backup at first or write to a new folder:
InFolder = 'D:\Your\Folder';
FileList = dir(fullfile(InFolder, '*.csv'));
OutFolder = 'D:\Your\FolderModified';
mkdir(OutFolder);
for iFile = 1:numel(FileList)
InFile = fullfile(InFolder, FileList(iFile).name);
...
OutFile = fullfile(OutFolder, FileList(iFile).name);
...
end
  7 Comments
Jan
Jan on 25 Feb 2021
Now I see it: the FREAD command relied a column vector but STRFIND expects a ow vector. I've fixed this in the code above.
MATLAB90
MATLAB90 on 25 Feb 2021
Thank you for your time and all the help. It works perfectly now.

Sign in to comment.

More Answers (0)

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!