\0D and \0A after array to spreadsheet string conversion
Hi guys, i currently have a VI that manipulates a couple of arrays and writes them to a config file through the config VI.
Now, i notice 1 problem whereby after my array is comma delimited and converted into a spreadsheet string, a tab and carriage return automatically appears at the end of the string. This causes my resulting config file to have \0D and \0A to appear with my keys in the config file.
I know it's got to be the array to spreadsheet string conversion that's causing the problem because i don't have such \0D and \0A problem with keys without the conversion.
How do i solve this?
The OD and OA are the carriage return and line feed and yes the functona always appends these characters at the end of each line. Probably because this function is normally used to create files that a spreadsheet can read. There are several ways to remove the extra characters. Shown below is the string reversed and the String Subset function uses an offset of two. The output of that is reversed to get a string without the CR and LF. Also shown is getting the string length, subtracting 2 and wiring that to the length input of the String Subset function.
Message Edited by Dennis Knutson on 07-26-2007 10:57 PM
Attachments:
Strip Last Two Characters.PNG 6 KB
Similar Messages
-
Deleting all elements from array and array to spreadsheet string
Hello,
I would like to write a new data file for each "recording" session without closing the VI. My problem is that the last "recording" session's data is at the top of every successive session's text file. I do not want this. I've tried to delete all rows from the array after my array to spreadsheet string function, but I think the problem is somewhere with the shift register and how the array is built. I'm not too familiar with LabView and this aspect of my interface is driving me crazy. Attached is my code and two successive data files. I have not been able to find a solution on these or the LAVA forums. Any help would be appreciated.
Also, I know there is an easier way to write this kind of streaming data, but I need to do it this way for other devices and synchronization purposes.
Attachments:
testsecond.txt 90 KB
test41.vi 80 KB
testfirst.txt 78 KBA few more comments to your code:
Your loop does not have a wait, meaning it spins the empty case millions if times per second, consuming all CPU while not doing anything. Add an indicator to [i] to see.
To clear a 2D array in one case frame, just don't wire the output tunnel and set it to "use default if unwired". You'll get an empty array. No fancy tools needed.
I probably would use an event structure and also protect the data if the save dialog is canceled.
Here's a simple draft that probably requires a bit more work but should show some of the ideas.
You should also
add some protection that the VI cannot consume all available memory if it runs forever.
Create a seperate case to save the data later if the file dialog is cancelled the first time.
LabVIEW Champion . Do more with less code and in less time .
Attachments:
test41MOD.vi 107 KB -
I am working with a network analyzer. I have arrays made of 5 columns the first consisting of an integer and the next four consisting of complex numbers. I am converting the array into a spreadsheet string and then saving the file using the write characters to a file VI. That seems to work well as when I open the file in Excel all the data is there. However when I try to reverse the process, open file and convert back to array, I loose some of the data. Specifically the imaginary parts of my complex numbers are all going to zero. I have narrowed down the problem to be in the conversion from spreadsheet string to array and vice versa. I
think the problem may be with the 'format' input to the VI. I do not have an adequate resource for this so I am not sure what to put in to accomplish my task. Any takers?Hi Biz
I don't think there is a direct way of converting a complex number to a
string, so when you convert the array to a spreadsheet string, the
numbers would be converted to real data.
However, you could try separating the real and imaginary parts using the
"Numeric: Complex to Re/Im" function, and then store these - either in
separate files or in adjacent columns/rows in the same file. Then, when
you read in the data again, use the "Numeric: Re/Im to Complex" function
to put the two "halves" together.
If you actually want Excel to interpret the numbers as imaginary, then
you'll probably want to create a string for each complex number of the
form "Re + Im*i" (after separating the Re and Im parts), by using
"String:Format into String" with 2 numeric inputs and the format string
"%f+%fi".
Reading the data back into Labview then would require splitting the
string into the 2 pieces by using "Stringcan from String" with 2
numeric outputs (smae precision as original numbers specified by the 2
Default Value inputs) and the same format string "%f+%fi", and then using
the above-mentioned "Numeric: Re/Im to Complex" function. It worked for
me, so if you can't follow what I am describing, send me an email and I
can email you what I did (LV 5.1.1).
Paul
Biz wrote:
> Having trouble converting array to spreadsheet string, storing the
> file and coverting back to array with complex numbers
>
> I am working with a network analyzer. I have arrays made of 5 columns
> the first consisting of an integer and the next four consisting of
> complex numbers. I am converting the array into a spreadsheet string
> and then saving the file using the write characters to a file VI. That
> seems to work well as when I open the file in Excel all the data is
> there. However when I try to reverse the process, open file and
> convert back to array, I loose some of the data. Specifically the
> imaginary parts of my complex numbers are all going to zero. I have
> narrowed down the problem to be in the conversion from spreadsheet
> string to array and vice versa. I think the problem may be with the
> 'format' input to the VI. I do not have an adequate resource for this
> so I am not sure what to put in to accomplish my task. Any takers?
Research Assistant
School of Physiotherapy, Curtin University of Technology
Selby Street, Shenton Park, Western Australia, Australia. 6008
email: [email protected]
Tel. +61 8 9266 4657 Fax. +61 8 9266 3699
"Everyone who calls on the name of the Lord will be saved." Romans 10:12
"For all have sinned and fall short of the glory of God, and are
justified freely by his grace through the redemption that came by Christ
Jesus." Romans 3:23-4 -
Array to spreadsheet string - remove space after delimiter
Hi
I created a Labview program to acquire a electrical signal and send it using TCP/IP.
The image in attachment shows a piece of my code. The AQ subVI was created by me to accomplish the acquisition.
However, the string that the "array to spreadsheet string" VI returns is something like this:
-0.800781^ -1.030273^ -1.098633^ -0.942383^ -0.644531^ -0.209961^ 0.258789^ 0.712891^
The VI is using the ^ character as a delimiter and it is converting commas to points as decimal separators.
Now, what i would like to do is to remove the space character between the ^ character and the sample value, simply because that is what the receiver of the TCP/IP message wants.
Can anybody help me?
Thanks in advance
Attachments:
Array to spreadsheet.png 7 KBhi there
remove the space between the ";" and "%" in your format specifier.
Best regards
chris
CL(A)Dly bending G-Force with LabVIEW
famous last words: "oh my god, it is full of stars!" -
Array To Spreadsheet String and DDE
I have an array (one dimensional) that I want publish as a dde topic.
So far I've been able to write all my dde components appear to be working,
with the exception of the dde set value function in conjunction with Array
To Spreadsheet String function.
Array to spread appears to parse the the array the way I want it (that is,
to create one
big string with newline chars seperating tokens) but it's output does not
seem to set correctly. If I look at the value right after I convert it to
a spreadsheet
string its good, but if I check it (once it's been loaded) using
DDE Srv Check Item it comes up blank.
Does anyone know what I'm doing wrong? I'm feeding the output of array
to spread driectly into DDE Srv Set Item, shou
ld it be going through another
function first? Or am I using the wrong function to parse my array? My
DDE
server seems to work ok if I just use single string values, is there something
about using arrays that I should be aware of? Any feedback is appreciated.Hi aschipfl,
some thoughts about your suggestion:
- When you want to suggest improvements to LabVIEW you should post in the Idea Exchange.
- NI will not change the behaviour of functions existing for a long time…
- NI will probably update the LabVIEW help for that function…
- a spreadsheet string needs some kind of delimiter, what's the purpose of creating a spreadsheet string without them?
When you really need a "Array to Spreadsheet String" without delimiters you could take this approach: -
Trouble with array to spreadsheet string
I am having trouble with the array to spreadsheet string.
I have a 1-d array of string, the output spreadsheet string never puts a space on the first row, but all others.
example:
05:59:29.170 00000101 8 00 00 07 00 0B 0E 0D 0C
05:59:29.198 00000100 8 00 00 3A 3A 39 39 39 39
05:59:29.220 00000101 8 00 00 07 00 0B 0E 0D 0C
05:59:29.248 00000100 8 00 00 39 39 39 39 39 39
format string is %s and default tab is delimiter.
this is screwing up my program because of the "scan for string" function can't be used correctly if the spreadsheet string isnt consistent.
Any suggestions?
ThanksYou don't need to use "array to spreadheet string": You could use plain formatting for full control over the output.
Still, your observation is a bit odd. Could you attach a simple VI that shows the behavior? (Put your input array into a diagram constant).
LabVIEW Champion . Do more with less code and in less time . -
Array To Spreadsheet String, Empty Delimiter
The Array To Spreadsheet String function does not accept an empty Delimiter, it uses the Tab character in such case.
The same is true for the Spreadsheet String To Array function (but of course this function cannot work without a Delimiter).
I would appreciate one of the following options:
to allow an empty separator for both functions (for Array To Spreadsheet String this can easily work obviously; for Spreadsheet String To Array you might see an empty string delimiter between each two adjacent characters similar to the Search and Replace String function with an empty search string);
to document that behaviour properly;
I would prefer the first option espacially for the Array To Spreadsheet String function. What do you think?Hi aschipfl,
some thoughts about your suggestion:
- When you want to suggest improvements to LabVIEW you should post in the Idea Exchange.
- NI will not change the behaviour of functions existing for a long time…
- NI will probably update the LabVIEW help for that function…
- a spreadsheet string needs some kind of delimiter, what's the purpose of creating a spreadsheet string without them?
When you really need a "Array to Spreadsheet String" without delimiters you could take this approach: -
Write array to spreadsheet string
Hi,
I have 3 numeric arrays and 1 string array. I am try to use the function write array to spreadsheet string. What is the easy way to do this, since I have both numeric and string, I can't create a 2d array directly?
Yik
Kudos and Accepted as Solution are welcome!
Solved!
Go to Solution.It depends how you want the file to store the data.
Attached is an example of two methods mentionned above. You can change the formatting so that you have the data on the same line or different lines.
There are many solutions depending on exactly what you want to accomplish.
--- didn't expect to see so many replies so quickly ---
Most people recommend converting the numeric array to string array first. I offer an alternative or a choice of both..
Attachments:
exampleOfWriteDiffArrayToSprdsht.png 28 KB -
Array To Spreadsheet String -- Convert EOL Option
The Array To Spreadsheet String and Spreadsheet String To Array functions should provide an option for (not) converting EOL (end-of-line) to platform-dependent ones. I am thinking of something similar to the Write/Read Text File options where you can place a checkbox in the context menu "Convert EOL". As per default such checkbox need to be checked for compatibility reasons.
Possibly another option/checkbox for not appending the final EOL would be nice, maybe "Final EOL" checked per default as well.Hi aschipfl,
some thoughts about your suggestion:
- When you want to suggest improvements to LabVIEW you should post in the Idea Exchange.
- NI will not change the behaviour of functions existing for a long time…
- NI will probably update the LabVIEW help for that function…
- a spreadsheet string needs some kind of delimiter, what's the purpose of creating a spreadsheet string without them?
When you really need a "Array to Spreadsheet String" without delimiters you could take this approach: -
3d array to spreadsheet string
I need a spreadsheet string eliminating all rows [x, 0, 0].
Solved!
Go to Solution.
Attachments:
test.vi 14 KBTry changing it into a 2D array instead.
There are only two ways to tell somebody thanks: Kudos and Marked Solutions
Unofficial Forum Rules and Guidelines
Attachments:
test_BD.png 26 KB -
Converting from spreadshet string to array and then back to spreadsheet string
My questions is; why is the Spreadsheet string to array function creating more data than the original string had when you change the array back into a spreadsheet string. Im trying to analyze a comma delimited file using array functions since my column and row size is constant, but my data varies. Thus my reason for not using string parsing functions which would get more involved and difficult. So, however, after i convert to a 2D array of data from the comma delimited file I read from, and then I convert back to string using the Array to Spreadsheet String, I get added columns to the file, which prevents another program from receiving these files. Also, the data which I am reading is not all contiguous, it has gaps in some places for empty data. Looking at the file compared to the original after it has gone from string to array and then back to string again, looks almost identical except for the file size which got larger by 400 bytes and where the original file has empty spaces, the new file has a lot of commas added. Any idea?
CharlesThe result you get is normal when the spreadsheet string contains rows of uneven length. Since the array rows have the same number of elements, nil values are added during the coonversion. And of course, the back to string conversion keep those added values in the string, with the associated commas.
example : 3 x 3 array
1,2,3
4
5,6,7
is converted into
1 2 3
4 0 0
5 6 7
then back to
1,2,3
4,0,0
5,6,7
Chilly Charly (aka CC)
E-List Master - Kudos glutton - Press the yellow button on the left... -
Writing arrays to spreadsheet w/ timestamp
Hi. I'm trying to build an application which will write a set of thermocouple values to a spreadsheet with a timestamp at the beginning of each row. What I have so far is a countdown loop which gives me regular intervals of time. When the loop reaches zero, the set of values in a global array variable goes into an "Array to Spreadsheet String.vi" then I use the Concatenate string to put a timestamp string, a space and the spreasheet string. Since "Write to spreadsheet.vi" needs an array input, I have to use the "Spreasheet string to Array.vi" then to the "Write to Spreadsheet.vi" So what this does is writes the TC values, but the timestamp gets lost somewhere in there and it write a completely wrong value
which looks nothing like a timestamp.
I appreciate any comments on this.In order to add a timestamp to each row, you will need to use the "write characters to file" VI. Since a spreadsheet is just a tab-delimited text file, you can use the "array to spreadsheet string" function to convert your array of data into a tab delimited string. Once you have this string, you can concatenate your time data to the start of it and write the resulting string to file.
I have created a simple example that writes randomly generated numbers to a spreadsheet every 0.5 seconds with a timestamp for each row. Hope this helps!
Attachments:
timestamp_spreadsheet.vi 20 KB -
How to remove only the last element of spreadsheet string
I use path to string option to store image path into database and while retrieving the string is again converted into path but it gives out an error as the output of array to spreadsheet string gives out a tab at the end which is unable for the IMAQ read file to recognise.but when i use the path of the image directly into IMAQ readfile the image is opened . so how to remove the tab only at the end of output of the spreadsheet string(whose length can vary)? I have also attached my program with this.
Attachments:
retrieve_images_from_DB.vi 65 KB
file_path_to_db_(images).vi 40 KB
create_table_for_images.vi 45 KBindhu wrote:
> Thanks for your reply!
> But my problem is to remove only the last element(which is a tab or an
> alphabet) from a spreadsheet string of any length.
If you just want to remove the last character of a string just use the
String Size function reduce the result by one and wire it together with
the string to the Split String function.
Rolf Kalbermatter
Rolf Kalbermatter
CIT Engineering Netherlands
a division of Test & Measurement Solutions -
Apparent inconsistency of "spreadsheet string to array"
System: LabView6.1, XPpro, 512MB, 2.4GHz
I have a sub-vi which I call to read a single column of data from a large CSV file. Files can be >500000 rows with 4-8 cols (ie. 15-30MB). The sub-vi uses "Read File", with byte stream type unwired, to return a string. This string is then passed to "spreadsheet string to array" (SStA), to obtain a 2D array. "Index Array" is then used to obtain the required data column.
If I wire the format string of SStA with %f, and the array type with a 2D double, the sub-VI takes about 8 seconds every time I call it.
If I wire format string with %s, and array type with 2D string (and convert to a double later, after index array), the sub-VI takes over 50s the first time it is c
alled, but only about 1s on each subsequent call.
The bottle neck is ONLY at SStA. I am not explicitly preallocating any arrays.
Can anyone explain what LabView is doing internally with respects to memory allocation? Why is the second routine slow on the first call only, and subsequently considerably faster than the first routine? Is there any alternative way of "priming" the second sub-vi so it is not slow on the first call? I guess reading only subsets of data at a time might help, but I'd still like to understand what is going on with the current approach.Roo Payne wrote:
> Can anyone explain what LabView is doing internally with respects to
> memory allocation? Why is the second routine slow on the first call
> only, and subsequently considerably faster than the first routine? Is
> there any alternative way of "priming" the second sub-vi so it is not
> slow on the first call? I guess reading only subsets of data at a time
> might help, but I'd still like to understand what is going on with the
> current approach.
Basically NI seems to have added some performance optimization with
internal caching to the Spreadsheet String to Array function in the case
of String outputs. Without it it would always take 50 seconds. If the
input string does change significantly it probably won't be such a huge
speed up anymore.
For numeric type outputs no caching has been added and wouldn't help
that much in comparison.
Rolf Kalbermatter
Rolf Kalbermatter
CIT Engineering Netherlands
a division of Test & Measurement Solutions -
Issues with spreadsheet string to array
Hi, I have a spreadsheet string (tab delimited) and I am trying to convert it into an array of double with 6 digits of precision after the decimal point. However, as shown in the attached example, the function "spreadsheet to array" is not giving me the desired digit of precision (only 2 after decimal point). I have tried almost everything and I am frustrated with this function. CAN SOMEONE PLZ HELP ME ??
Attachments:
Block diagram.png 13 KB
String to array double.vi 10 KB
Panel.png 28 KBI have no LV 8.x installed, so I can't check your Code. But it might be your settings for the indicator. In LV 7.1 it defaults to 6 significant digits, that means the reading is 12345,6789 but (only) your indicator displays 12345,6.
Right click on your indicator (Front Panel) and go to formatting.
Felix
www.aescusoft.de
My latest community nugget on producer/consumer design
My current blog: A journey through uml
Maybe you are looking for
-
How to call the print method from a custom program
Hi, I need to print the text thats displayed in a custom area. Its added to a custom container. Can anyone help me out to do this? Thanks Lilan
-
Very high transaction log file growth
Hello Running Exchange 2010 sp2 in a two node DAG configuration. Just recently i have noticed a very high transaction log file growth for one database. The transaction logs are growing so quickly that i have had to turn on circular logging in order
-
Vizio VTAB10008 Running Android 2.32 Adobe Flash 10.3
-
PPPoE Menu Problem in Time Capsule
I just set up a Time Capsule 500GB as my network gateway. The Time Capsule is connected to a simple DSL modem, which just forwards the phone line over ethernet. I am using PPPoE to connect to the internet, and my DSL provider is Qwest broadband. I am
-
Won't read my A/V device when I open up Final Cut HD
I had been using Final Cut Express for a while and decided to upgrade to final cut pro. I now am running Final Cut Pro HD. When I go to open a project, it will not read my Firewire connection to my DVX100 panasonic camcorder. We tried with a canon xl