[swift-users] String manipulation (replacingOccurrences) in Linux swift
Carlos Barrera Hernandez
carlosbarrera_bcn at yahoo.es
Thu May 26 07:36:57 CDT 2016
Hi,
I’m currently using swift to build a project, and have found a pretty hard to bypass roadBlock.
The main workflow of the project is
- Read a csv file
- Extract the values of the rows and columns
- Process data extracted from file
- Write some results to another file
Pretty simple and straightforward. Got it working on OSX with 2016-05-09 (a) toolchain without problems, using the CSV parser from https://github.com/Daniel1of1/CSwiftV with the minimal modifications to compile with swift 3.
But i need it to compile and work with linux ubuntu.
I prepared a work environment with the instructions in https://www.raywenderlich.com/122189/introduction-to-open-source-swift-on-linux
and it works and compiles swift code wonderfully, even installed the same snapshot of the swift toolchain to make it all happy.
The problem i found is some of the string functionality i need for the csv parser to work, is not working ok in linux.
- String.replacingOccurences(of: stringToFind, with: stringToPutInstead)
does not work the same in both environments.
i have a csv file obtainable from https://archive.ics.uci.edu/ml/datasets/default+of+credit+card+clients
That contains the pattern “\r\n” and i need it to be replaced with “\n” to later on process the rest of the file.
the code i use is:
#if os(Linux)
print("Let's change those carriage returns...")
processedString = string.replacingOccurrences(of: "\r\n", with: "\n")
#else
processedString = string.replacingOccurrences(of: "\r\n", with: "\n")
#endif
And it compiles flawlessly in linux, but when it’s time to execute, it throws an error message like:
Let's change those carriage returns...
Illegal instruction (core dumped)
I tried escaping the pattern ( “\\r\\n”) and it does not throw the error, but neither replaces the code
When i tried executing the same code in the Linux virtual machine in the REPL environment, the sequence of events was:
1> import Foundation
2> let path = "/vagrant/credit_card.csv"
path: String = "/vagrant/credit_card.csv"
3> let text = NSString(contentsOfFile: path as String, encoding: NSUTF8StringEncoding)
text: Foundation.NSString = {
Foundation.NSObject = {}
_cfinfo = {
info = 1920
pad = 0
}
_storage = "ID,LIMIT_BAL,SEX,EDUCATION,MARRIAGE,AGE,PAY_0,PAY_2,PAY_3,PAY_4,PAY_5,PAY_6,BILL_AMT1,BILL_AMT2,BILL_AMT3,BILL_AMT4,BILL_AMT5,BILL_AMT6,PAY_AMT1,PAY_AMT2,PAY_AMT3,PAY_AMT4,PAY_AMT5,PAY_AMT6,default payment next month\r\n1,20000,2,2,1,24,2,2,-1,-1,-2,-2,3913,3102,689,0,0,0,0,689,0,0,0,0,1\r\n2,120000,2,2,2,26,-1,2,0,0,0,2,2682,1725,2682,3272,3455,3261,0,1000,1000,1000,0,2000,1\r\n3,90000,2,2,2,34,0,0,0,0,0,0,29239,14027,13559,14331,14948,15549,1518,1500,1000,1000,1000,5000,0\r\n4,50000,2,2,1,37,0,0,0,0,0,0,46990,48233,49291,28314,28959,29547,2000,2019,1200,1100,1069,1000,0\r\n5,50000,1,2,1,57,-1,0,-1,0,0,0,8617,5670,35835,20940,19146,19131,2000,36681,10000,9000,689,679,0\r\n6,50000,1,1,2,37,0,0,0,0,0,0,64400,57069,57608,19394,19619,20024,2500,1815,657,1000,1000,800,0\r\n7,500000,1,1,2,29,0,0,0,0,0,0,367965,412023,445007,542653,483003,473944,55000,40000,38000,20239,13750,13770,0\r\n8,100000,2,2,2,23,0,-1,-1,0,0,-1,11876,380,601,221,-159,567,380,601,0,581,1687,1542,0\r\n9,140000,2,3,1,28,0,0,2,0,0,0,11285,14096,12108,12211,11793,"...
}
4> var tmp = text.replacingOccurrences(of: "\r\n", with: "\n")
tmp: String = {
_core = {
_baseAddress = <extracting data from value failed>
_countAndFlags = <extracting data from value failed>
_owner = <extracting data from value failed>
}
}
Execution interrupted. Enter code to recover and continue.
Enter LLDB commands to investigate (type :help for assistance.)
And i found myself without more options to know what’s happening.
Is it a bug i need to report? is there something i’m missing?
What would really be a blessing, is something akin to the xcode swift documentation that covered the linux equivalence of commands.
I know is a young project yet, but it really needs to improve the docs for Linux development to be viable. ( and a GUI like Xcode too ;) )
If anyone knows anything that can help, i’d be gratefull.
Carlos Barrera
shadowcharly at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20160526/fa36e848/attachment.html>
More information about the swift-users
mailing list