trim the first 2 characters from each line in a file

Posted on 2010-11-10
Last Modified: 2012-05-10
I have 4 types of files I receive which are outputs from a source I have no control over. Each file has in common that there are a consistent 2-4 characters in front of each line (in the 1st column for XLS docs). I want a scripted way to remove these. Can you suggest a method?
Thank you!
Question by:johndarby
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
  • 2
  • +2
LVL 24

Accepted Solution

broomee9 earned 250 total points
ID: 34106244
Assuming headers, this will remove the first 2 characters from every cell in column A.

Option Explicit

Sub Remove2Chars()

    Dim i As Long
    Dim lastRow As Long
    lastRow = Range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To lastRow
        Cells(i, 1).Value = Right(Cells(i, 1).Value, Len(Cells(i, 1).Value) - 2)
    Next i

End Sub

Open in new window

LVL 24

Expert Comment

ID: 34106265
To use a formula approach, you could put this in B2 and drag down to remove the first two characters in A2 and down:


Also, you say between 2-4 characters.  What is the logic behind removing 2 or 4?

Assisted Solution

fredniel earned 250 total points
ID: 34106281
Can you post an example... or be more specific.

to figure out if there will be some delimitators or something.
How can we differentiate each type of file?

if your are trying just to remove the first column:


Best Practices: Disaster Recovery Testing

Besides backup, any IT division should have a disaster recovery plan. You will find a few tips below relating to the development of such a plan and to what issues one should pay special attention in the course of backup planning.


Author Comment

ID: 34106495
Thanks folks! I don't have an example for you atm, but the extra characters seem to be random ASCII which precede the contents of each line in the docs. Usually it is 2 characters, sometimes 4 and occasionally it will be 5-9 characters, including one or more spaces, between the "garbage" characters.

The docs come from text dumps (they call them reports) from an MVS app called Universe, where one of the conversions that happens is EBCDIC-->ASCII. It's a black box to me.

Expert Comment

ID: 34106551
i think that we really need you to prepare an example...
there must be something to figure out how many characters to delete...

How can we identify those "garbage" characters...

there is something missing in the formulation of this problem.


Author Comment

ID: 34106885
I can get you an example...I just need to strip customer-specific data, first since this has payroll info in it. :)

Expert Comment

ID: 34106927
Agree with that. We are waiting for you then.
LVL 13

Expert Comment

ID: 34110730
Here is a code to select an Excel file and replace string bits from the 1st column. Note, multi-select Excel file is possible as well as the string bits (for cleaning) and Column Index (data column) is configurable.

To run the code in the attached file, press CNTRL + SHIFT + M
Option Explicit
Private Const sJunk As String = "#$%!"
Dim sJunkFormula As String

Public Sub CleanFileData()
Dim oOut, oWB As Workbook, nCtr As Integer
On Error Resume Next
oOut = Application.GetOpenFilename("Excel Files, *.xl*;*.xls;*.xlt", 2, "Select the files to clean", , True)
If Not IsArray(oOut) Then GoTo ErrCancel
sJunkFormula = ""
For nCtr = 1 To UBound(oOut)
    Set oWB = Application.Workbooks.Open(oOut(nCtr))
    CleanRange oWB.Sheets(1).Range("A:A")
    Set oWB = Nothing
Exit Sub
MsgBox "No File was selected.", vbCritical
End Sub

Public Sub CleanRange(oRange As Range)
Dim nCtr As Integer, oCell As Range
Dim m_sJunkFormula As String

If sJunkFormula = "" Then
    sJunkFormula = """~|~"""
    For nCtr = 1 To Len(sJunk)
        sJunkFormula = "SUBSTITUTE(" & sJunkFormula & ",""" & Mid(sJunk, nCtr, 1) & ""","""")"
End If
Set oRange = Application.Intersect(oRange, oRange.Worksheet.UsedRange)
oRange.NumberFormat = "General"
'oCell.Formula = "=" & Replace(sJunkFormula, "~|~", Replace(oRange.Cells(1).Address, "$", ""))
For Each oCell In oRange.Cells
    m_sJunkFormula = "=" & Replace(sJunkFormula, "~|~", oCell.Value)
    oCell.Value = Application.Evaluate(m_sJunkFormula)
End Sub

Open in new window

LVL 34

Expert Comment

ID: 34111930
If you can open these files in Excel and all you want to do is remove the first 2 characters of each line you could use Data>Text to columns... with fixed width.
You would only need one break line after the characters you don't need and you can chose not to import that column on the 3rd step.
If it isn't going to be the first 2 characters each time then you could create code that does the text to columns for however many characters it is.
Here's the code for 2 characters.
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _
        FieldInfo:=Array(Array(0, 9), Array(2, 1)), TrailingMinusNumbers:=True
The Array... part breaks down to this.
Array(0,9) - 1st column, do not import
Array(2,1) -2nd column, import starting at character 2
Note the character position starts at 0.
So for 3 characters you would change Array(2,1) to Array(3,1), for 4 Array(4,1)... and so on.
This would work if you can open the file in Excel and determine the no of characters to ignore.

Author Comment

ID: 34112970
Guys, I am having a hard time getting you a sample file. The problem lies with how much data (SSN, names, addresses, policy number...) is sensitive. I think I just have to be thnkful for the help you've given already. Thank you so much!

Author Closing Comment

ID: 34112985
Thank you again!

Featured Post

On Demand Webinar: Networking for the Cloud Era

Did you know SD-WANs can improve network connectivity? Check out this webinar to learn how an SD-WAN simplified, one-click tool can help you migrate and manage data in the cloud.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Windows 10 came with  a lot of built in applications, Some organisations leave them there, some will control them using GPO's. This Article is useful for those who do not want to have any applications in their image (example:me).
This article describes a serious pitfall that can happen when deleting shapes using VBA.
Graphs within dashboards are meant to be dynamic, representing data from a period of time that will change each time the dashboard is updated with new data. Rather than update each graph to point to a different set within a static set of data, t…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

707 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question