Sklejanie liczby z dwóch ciągów znaków

Odpowiedz Nowy wątek
2019-09-11 17:59
0

Witam Panowie!
Już mi kończą się pomysły. Potrzebuję zrobić coś takiego, że gdy w GetText(1) = 521511000 a w CSVParser.Row.Fields[1] = 1 to wyjdzie mi wartość 521511001

Próbowałem zrobić to w sposób następujący :

CSVParser.OpenFile(AFileName);

      OutputList.Clear;
      while not CSVParser.EOF do
      begin
        TempRow := '';

        Temp := GetText(1);
        Delete(Temp, Length(Temp) - 2, MaxInt);
        Temp := Temp + Copy(CSVParser.Row.Fields[0], Length(CSVParser.Row.Fields[0]) - 2, MaxInt);

        TempRow := Temp + ',' +                                                  //NUM

Jednak gdy daję

Temp := Temp + Copy(CSVParser.Row.Fields[0], Length(CSVParser.Row.Fields[0]) - 2, MaxInt);   

To zwraca mi wartość 5215111 Czyli bez dwóch zer.

Macie może jakieś pomysły jak z tego wybrnąć?

edytowany 1x, ostatnio: furious programming, 2019-09-12 00:01
Jak będziesz byle jak tytułował wątki to będą lądować w koszu. Tytuł poprawiłem, a Ty przeczytaj ten artykuł – Tytułowanie wątków. - furious programming 2019-09-12 00:02

Pozostało 580 znaków

2019-09-11 18:29
0

Np. Dolozyc dwa zera w pliku do jedynki.

Pozostało 580 znaków

2019-09-11 18:38
0

To nie wchodzi w grę.

Pozostało 580 znaków

2019-09-11 20:06
0

A co ma wyjść?


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2019-09-11 20:44
0

zamien to:

Temp := Temp + Copy(CSVParser.Row.Fields[0], Length(CSVParser.Row.Fields[0]) - 2, MaxInt);

na to (pisane z glowy i brzydko):

        case Length(CSVParser.Row.Fields[0]) of
         1:   Temp := Temp + '00' + Copy(CSVParser.Row.Fields[0], Length(CSVParser.Row.Fields[0]), MaxInt);
         2:   Temp := Temp + '0' + Copy(CSVParser.Row.Fields[0], Length(CSVParser.Row.Fields[0]) - 1, MaxInt);
         else Temp := Temp + Copy(CSVParser.Row.Fields[0], Length(CSVParser.Row.Fields[0]) - 2, MaxInt);
        end;   

PS. oczywiscie warto zapisac powtarzajacy sie kod do zmiennej, ale nie oszukujmy sie :)

edytowany 2x, ostatnio: furious programming, 2019-09-11 21:58
nie oszukujmy sie ??? - cerrato 2019-09-11 20:54
trzeba podstawy miec jednak jakies, oby chociaz skopiowac sie udalo - lampasss 2019-09-11 20:57
Brak podstaw można nadrobić entuzjazmem ;) - cerrato 2019-09-11 21:02

Pozostało 580 znaków

2019-09-11 20:58
0

Momento, chcesz dodawać liczby traktując je jak stringi?

Pozostało 580 znaków

2019-09-11 22:00
0

@lampasss: słyszałeś o czymś takim jak StringOfChar? ;)


edytowany 1x, ostatnio: furious programming, 2019-09-11 22:00
Jasne ze tak - lampasss 2019-09-12 06:19

Pozostało 580 znaków

2019-09-12 01:43
0
Temp[Length(Temp)]:=Chr(Ord('0')+CSVParser.Row.Fields[1] );

?
Może wyjaśnij dokładnie co chcesz otrzymać


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2019-09-12 07:46
0

Może podam na przykładach.
Jeżeli mam podaną wartość 152 987 000 i wczytam wartość 1 to wyjdzie mi 152 987 001.

Mam 152 987 000 i wczytuję 10 wychodzi 152 987 010

Mam 152 987 000 i wczytam 100 wyjdzie 152 987 100

Mam 152 987 000 i wczytam 1000 to wyjdzie 152 987 000

Jak widzisz głównie chodzi o 3 ostatnie liczby, które mam podmienić gdy wczytuję wartość. Z tym, że zwykłe copy nie zdaje egzaminu z tego powodu, że gdy wczytam wartość z jednej lub dwóch liczb to mi ucina zera. Dla przykładu :

Mam 152 987 000 i wczytuję 1 to wychodzi 152 987 1
Czyli jest źle w tym przypadku. Powinno wyjść 152 987 001

Może dało by się zrobić to jakoś z predefiniowaną wartością?
Coś takiego:
If (1) return (001)
If (2) return (002)
I tak dalej. Chyba, że myślę jakoś naokoło.

edytowany 2x, ostatnio: Marysza, 2019-09-12 07:59

Pozostało 580 znaków

2019-09-12 08:35
2

No bez jaj.
Jeśli chcesz dodać dwie liczby to po prostu je dodaj a nie kombinuj z jakimś sklejaniem.
Jeśli pierwsza liczba wygląda jak piszesz "XXX XXX XXX" to usuń spacje, potraktuj ją jako liczbę i dodaj drugą.
Jeśli jako wynik chcesz liczbę w formacie "XXX XXX XXX" to po działaniu matematycznym ponownie zamień ja na stringa umieszczając spacje co 3 cyfry.

Pozostało 580 znaków

2019-09-12 08:39
0

Ale co to Free Pascal czy Delphi?
152 987 000 ten ciąg jest tak sformatowany (ze spacjami) i pierwsze 6 cyfr + spacja zawsze ma zostać a później chcesz do tego dodać jedną liczbę (o jest od razu liczba czy string?) poprzedzając ją zerami tak aby składała się zawsze z 3 cyfr?


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0